Проблема
Я пытаюсь написать одностраничное приложение (SPA), где изначально приложение показывает модуль «A». Когда пользователь щелкает элемент в «A», отображается модуль «B», и ему передается идентификатор от A. (Например, A отображает список идентификаторов сотрудников, щелчок по одному сотруднику означает, что B отображает сведения об этом сотруднике)
Первоначально мой URL-адрес:
http://localhost:8000/
При нажатии на элемент в A с идентификатором 123, URL-адрес изменится на следующий, что является правильным:
http://localhost:8000/A/123
Однако, Я получаю следующую ошибку
GET http://localhost:8000/b/js/viewModels/B.js net::ERR_ABORTED 404 (Not Found)
ojModule failed to load viewModels/B
ojlogger.js:257 Error: Script error for "viewModels/B"
Я не знаю, почему он изменил путь и добавил дополнительный «/ b /» для получения файла B.js / B.html. Конечно, он не может найти этот файл, так как в моей структуре проекта нет такой папки "b".
Образец Oracle Jet Cookbook
https://www.oracle.com/webfolder/technetwork/jet/jetCookbook.html?component=router&demo=stateParams
Я использую образец из OracleJet Cookbook для маршрутизатора с параметрами состояния. Если вы откроете этот пример в полноэкранном режиме, вы увидите, что URL-адрес первого экрана (A) равен
https://www.oracle.com/webfolder/technetwork/jet/content/router-stateParams/demo.html
. При нажатии на человека в списке URL-адрес меняется на следующий, который совпадает с моим. ,
https://www.oracle.com/webfolder/technetwork/jet/content/router-stateParams/demo.html/detail/7566
Этот образец кулинарной книги не похож на мой.
Мой код
структура проекта
src
|- index.html
|- js
|- main.js
|- viewModels
|- A.js
|- B.js
|- views
|- A.html
|- B.html
index.html
....
<body>
<div id="routing-container">
<div data-bind="ojModule:router.moduleConfig"></div>
</div>
</body>
....
main.js
requirejs.config(
{
baseUrl: 'js',
....
}
require(['ojs/ojbootstrap', 'ojs/ojrouter', 'knockout', 'ojs/ojmodule-element-utils', 'ojs/ojknockout', 'ojs/ojmodule'],
function (Bootstrap, Router, ko) {
// Retrieve the router static instance and configure the states
var router = Router.rootInstance;
router.configure({
'a': {label: 'a', value: 'A', isDefault: true},
'b/{id}': {label: 'b', value: 'B' }
});
var viewModel = {
router: router
};
Bootstrap.whenDocumentReady().then(
function(){
ko.applyBindings(viewModel, document.getElementById('routing-container'));
Router.sync();
}
);
});
A.html
....
<div on-click="[[onClicked]]" >
....
</div>
...
A.js
define(['ojs/ojcore', 'ojs/ojrouter', 'knockout', '],
function (oj, Router, ko) {
function AViewModel(params) {
....
router = Router.rootInstance;
....
this.onClicked= function(event) {
router.go('b/'+ 123);
}
....
};
}
return AViewModel;
}
Попытки
Я попытался добавить одно из следующего в "main.js", и это не имеет значения.
Router.defaults['baseUrl'] = '';
Router.defaults['baseUrl'] = 'js';
Router.defaults['baseUrl'] = '/js';
Router.defaults['baseUrl'] = '/js/';