【问题标题】:Singleton Backbone models with RequireJS: anti-pattern?带有 RequireJS 的 Singleton Backbone 模型:反模式?
【发布时间】:2012-09-21 03:03:52
【问题描述】:

我有一个模型需要被多个视图访问,为了在模型模块的定义中完成这个,我立即实例化它,如下所示:

define([
    'jquery',
    'underscore',
    'backbone'
], function(_, Backbone) {
    var Foo = Backbone.Model.extend({
        // wondrous methods and properties
    });

    return new Foo();
});

我真的只需要这个模型的一个实例——现在就是这样。据我所知,解决方法是有一个单独的App 模块。比如:

define([], function() {
    var App = {
        routers: {},
        models: {},
        views: {}
    };

    return App;
});

您可以在其上实例化和存储应用启动时对对象的引用:

require([
    'App',
    'Foo'
], function(App, Foo) {
    App.models.foo = new Foo();
});

但我觉得这是一个糟糕的选择,因为你基本上要回到拥有一个全局命名空间 - 这是 RequireJS 应该帮助避免的事情。

是否有任何替代方案,是否有充分的理由避免使用如上所述的单例模型?

【问题讨论】:

  • 按照您在第一个示例中所做的方式,您应该完全没问题。

标签: javascript backbone.js requirejs


【解决方案1】:

嗯.. 一段时间以来,我一直将 RequireJS 模块用作 Singleton 对象,没有任何问题。这是我问的一个相关问题。

Is it a bad practice to use the requireJS module as a singleton?

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    你不需要创建命名空间的东西。您的第一个示例创建了一个单例。每当您需要此模块时,您都会获得模型的相同实例。因此,无需创建新的 App 模块并将实例保存在那里,只需直接要求您的第一个示例的模块即可。我们在我们的应用程序中使用它来拥有我们应用程序的单例实例,我看不出有任何缺陷。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-07
      • 1970-01-01
      • 2013-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多