我會用下面的方法使用CommonJS模塊。這些子應用程序或模塊不能啓動或停止,但它們提供了很好的分離。
app.js
var Marionette = require('backbone.marionette');
var _ = require('underscore');
module.exports = Marionette.Application.extend({
initialize: function() {
this._modules = [];
},
addModule: function(name, klass ,options) {
var module = new klass(options);
this._modules[name] = module;
}
});
layout.js
var Marionette = require('backbone.marionette');
module.exports = Marionette.LayoutView.extend({
el: '#app',
regions: {
header: '[data-region="header"]',
main: '[data-region="main"]'
}
});
基團/ index.js
var Marionette = require('backbone.marionette');
var Router = require('./router');
var Group = require('./model/group');
var GroupCollection = require('./model/group_collection');
var GroupListView = require('./list/collection_view');
var GroupDetailView = require('./detail/group_view');
module.exports = Marionette.Object.extend({
initialize: function(options) {
this.container = options.container;
this.router = new Router({
controller: this
});
this.groups = new GroupCollection();
},
groupList: function() {
var groupListView = new GroupListView({
collection: this.groups
});
this.groups.fetch();
this.container.show(groupListView);
},
groupDetail: function(id) {
var groupDetailView = new GroupDetailView({
model: this.groups.findWhere({id: id})
});
this.container.show(groupDetailView);
}
});
組/ router.js
var Marionette = require('backbone.marionette');
module.exports = Marionette.AppRouter.extend({
appRoutes: {
'groups': 'groupList',
'groups/:id': 'groupDetail'
}
});
main.js
var Backbone = require('backbone');
var Application = require('./app');
var MainLayout = require('./layout');
var HeaderApp = require('./header');
var GroupsApp = require('./groups');
var app = new Application();
var layout = new MainLayout();
app.addModule('header', HeaderApp, {
container: layout.getRegion('header')
});
app.addModule('groups', GroupsApp, {
container: layout.getRegion('main')
});
app.start();
Backbone.history.start({
pushState: true
});
我省略了模型,收藏和欣賞到這個例子,但我希望你得到的要點。
您的應用程序是一個擴展的木偶應用程序,您可以在其上註冊模塊。
每個模塊都存放在它自己的文件夾中,並帶有一個index.js文件作爲模塊的入口點。在這個文件中,你建立一個Marionette對象,作爲你模塊的控制器。
每個模塊都有它自己的路由器,在index.js文件中包含Marionette對象,因爲它是控制器。
隨意添加模型,集合,視圖和模板。對於模塊之間的通信,您可以使用Backbone.Radio。
最後,在main.js中引導您的應用程序,主要佈局和模塊,並使用browserify或webpack構建它。
免責聲明
我沒有發明這個架構自己,但此刻我不記得原來的來源。
謝謝,這是一個有趣的方式。我用我的子應用程序的Marionette.Object(s)的派生。 – user2710915