Application对象不仅仅是容器/模块吗?

时间:2013-09-17 19:58:03

标签: backbone.js marionette

我一直在使用Marionette改写我的应用程序,但我有点困惑。

在我看过的每一个用法中,Marionette.Application对象似乎只是用作容器/顶级模块(它是),仅此而已:

App = new Marionette.Application();

App.module('myModule', function(args) { /* ... */ });

App.on('event', function() {});

在我进行测试时,有必要偶尔创建一个新的Application实例并传入不同的选项。由于此设置,这意味着我还需要在我的新实例上调用必要的函数(例如addInitializeraddRegions.module)。

这与其他对象(如模型或视图)形成对比,在对象甚至被实例化之前,大多数(如果不是全部)配置都在配置选项中发生:

MyModel = Backbone.Model.extend({
    idAttribute: 'different-id',
    defaults: {
        'content-type': 'product'
    },

    sync: function() {
        // override a function
        return false;
    }
});

与这些对象不同,我们必须在进行任何配置之前实例化Application

我是否误解了Application对象的目的?它应该只是一个通用的顶级容器吗?

2 个答案:

答案 0 :(得分:2)

直接从doc

  

应用程序旨在直接实例化,但您可以扩展它以添加自己的功能。

它被用作最顶层的容器,有助于提供将所有子组件“绑定”在一起的工具。

答案 1 :(得分:2)

Application是SPA的核心,您应该在任何给定页面上运行一个实例。您网站的每个主要功能都将以Modules的形式从应用中分支出来;模块之间发生的任何协调都应设置在Application级别。一般来说,您将定义您的应用程序,定义一组模块,添加初始化程序以在模块之间设置通信,然后start应用程序,它将自动触发所有模块的启动(除非另有配置)。

如果您发现自己在一个页面上使用多个应用程序,则可能没有足够的抽象;应用程序真的应该只包含将跨模块共享的逻辑;如果每个模块完全独立,那么你是对的 - 你的应用程序可能看起来像一个非常通用的容器。

... HTH