Как синхронизировать / организовать модули, используя requirejs и Backbone.Marionette
Я организовал файловую структуру моего веб-приложения, которое используетRequireJs а такжеBackbone.Marionette,в этом случае:
|- main.js
|- app.js
|- /subapp1
|- subapp1.js
|- subapp1.router.js
|- /subapp2
|- subapp2.js
|- subapp2.router.js
|- /colections
|- /views
Для загрузки модулей я использую requireJs.
Вот мой код, для каждого модуля я задаю несколько вопросов.
// main.js
define([
'app',
'subapp1/subapp1.router',
'subapp2/subapp2.router'
], function (app) {
"use strict";
app.start();
});
Вопросы:
1) Правильно ли асинхронно загружать приложение и вложенные приложения, даже если вложенные приложения нуждаются в приложении?
2) для subApps правильно загрузить роутер, которому нужно приложение?
// app.js
/*global define*/
define([
'backbone',
'marionette',
'models/user'
], function (Backbone, Marionette, UserModel) {
"use strict";
var App = new Marionette.Application();
App.addRegions({
header: '#header',
sidebar: '#sidebar',
mainColumn: '#main-column',
rightColumn: '#right-column'
});
App.on("initialize:before", function () {
this.userModel = new UserModel();
this.userModel.fetch();
});
App.on("initialize:after", function () {
Backbone.history.start();
});
return App;
});
Вопросы:
3) Так какsubApps
может понадобиться немногоmodels
Я решил загрузить его вapp.js
, Так ли это правильно?
// subapp1/subapp1.js
/*global define*/
define([
'app',
'subapp1/views/sidebarView',
'subapp1/views/headerView'
], function (app, SidebarView, HeaderView) {
"use strict";
app.addInitializer(function(){
app.header.show(new HeaderView({userModel: app.userModel}));
app.sidebar.show(new SidebarView({userModel: app.userModel}));
});
});
Вопросы:
4) насчет этого модуля я не уверенapp.addInitializer
.
Я не уверен, например, еслиapp.userModel
будет доставлен, когда я выполнюapp.header.show
.
Should it be ok?
// subapp1/subapp1.router.js
/*global define*/
define([
'marionette',
'tasks/app'
], function (Marionette, app) {
"use strict";
var Router = Marionette.AppRouter.extend({
appRoutes: {
'tasks': 'tasks',
'tasks/:id': 'taskDetail',
'*defaults': 'tasks'
}
});
return new Router({
controller: app
});
});
Вопрос:
5) нормально ли загружать сmain.js
subapp1/subapp1.router
вместоsubapp1/subapp1
?