Доброго времени суток. Столкнулся со следущей проблемой.
Есть приложение на Marionette.js
При запуске приложение, загружаем основной модуль.
app.on("start", function(options){
if (Backbone.history){
require(["modules/mainModule"], function () {
/** Для отслеживания события hashchange */
Backbone.history.start({
root: "/app/"
});
});
}
});
модуль в свою очередь добавляет основные роутеры
define([
'marionette',
'controllers/mainController'
], function (Marionette, mainController) {
'use strict';
return Marionette.AppRouter.extend({
controller: mainController,
appRoutes: {
'': 'index',
'customer': 'customer',
'client': 'client',
}
});
});
При роутеру /app/customer срабатывает соответствующий контролер. Который в свою очередь должен запустить модуль customerModule
*/
define([
'app',
'marionette',
'models/userModel',
'routers/customerRouter'
], function(app, Marionette, userModel, customerRouter){
var customerModule = app.module("customerModule", function(customerModule, app, Backbone, Marionette, $, _) {
// this.startWithParent = false;
this.addInitializer(function(){
console.log('Module:customerModule => initialized');
// роутеры
this.router = new customerRouter();
});
});
return customerModule;
});
Этот модуль в свою очередь должен добавить нужные ему роутеры
define([
'marionette',
'controllers/customerController'
], function (Marionette, customerController) {
'use strict';
return Marionette.AppRouter.extend({
controller: customerController,
appRoutes: {
'customer/tasks': 'tasks',
'customer/product': 'product',
'customer/templates': 'templates',
}
});
});
Сам модуль customerModule подключается в app.js примерно так
/** @type {Array} Массив модулей системы */
var listModules = ["customerModule"];
/** Автоматически подгружаем все модули системы */
_.each(listModules, function (moduleName) {
require(['modules/'+moduleName]);
});
Проблемы начинаются при навигации пользователя по приложению.
Если модуль customerModule подключается с
this.startWithParent = false;
то при заходе сразу на роутер /app/customer/tasks мы ни чего не получаем. Так как модуль не запущен.
Но если мы сначала зайдем на /app/customer а потом на /app/customer/tasks то все будет ок.
Я не могу запускать модуль при подключении, так как он сразу начнет рендрится, а этого нельзя допустить. Так как в приложении есть 1 основной слой, куда в зависимости от раздела должен рендрится определенный модуль.
Я не знаю как мне решить эту проблему...