@z0091

Как правильно запустить модуль по роутеру?

Доброго времени суток. Столкнулся со следущей проблемой.

Есть приложение на 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 основной слой, куда в зависимости от раздела должен рендрится определенный модуль.

Я не знаю как мне решить эту проблему...
  • Вопрос задан
  • 213 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы