【发布时间】:2024-01-08 16:03:01
【问题描述】:
我用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.header.show 时是否会获取app.userModel。
应该没问题吧?
// 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吗?
【问题讨论】:
-
我也有类似的问题。设法整理了一个起点样板:link希望它有所帮助;)
-
你可能会以github.com/jamuhl/bmq-tmpl为基础
标签: javascript backbone.js requirejs marionette