我一直在使用Marionette改写我的应用程序,但我有点困惑。
在我看过的每一个用法中,Marionette.Application
对象似乎只是用作容器/顶级模块(它是),仅此而已:
App = new Marionette.Application();
App.module('myModule', function(args) { /* ... */ });
App.on('event', function() {});
在我进行测试时,有必要偶尔创建一个新的Application
实例并传入不同的选项。由于此设置,这意味着我还需要在我的新实例上调用必要的函数(例如addInitializer
,addRegions
,.module
)。
这与其他对象(如模型或视图)形成对比,在对象甚至被实例化之前,大多数(如果不是全部)配置都在配置选项中发生:
MyModel = Backbone.Model.extend({
idAttribute: 'different-id',
defaults: {
'content-type': 'product'
},
sync: function() {
// override a function
return false;
}
});
与这些对象不同,我们必须在进行任何配置之前实例化Application
。
我是否误解了Application
对象的目的?它应该只是一个通用的顶级容器吗?
答案 0 :(得分:2)
答案 1 :(得分:2)
Application
是SPA的核心,您应该在任何给定页面上运行一个实例。您网站的每个主要功能都将以Modules
的形式从应用中分支出来;模块之间发生的任何协调都应设置在Application
级别。一般来说,您将定义您的应用程序,定义一组模块,添加初始化程序以在模块之间设置通信,然后start
应用程序,它将自动触发所有模块的启动(除非另有配置)。
如果您发现自己在一个页面上使用多个应用程序,则可能没有足够的抽象;应用程序真的应该只包含将跨模块共享的逻辑;如果每个模块完全独立,那么你是对的 - 你的应用程序可能看起来像一个非常通用的容器。
... HTH