1

我一直在使用 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目的吗?它只是应该是一个通用的顶级容器吗?

4

2 回答 2

2

直接来自文档

该应用程序旨在直接实例化,尽管您可以对其进行扩展以添加您自己的功能。

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

于 2013-09-19T22:20:13.163 回答
2

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

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

HTH...

于 2013-09-23T01:38:12.253 回答