8

複数のビューからアクセスする必要があるモデルがあり、モデル モジュールの定義でこれを達成するために、次のようにすぐにインスタンス化しています。

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

    return new Foo();
});

このモデルのインスタンスが 1 つだけ必要です。私の知る限り、これを回避するには、別のAppモジュールを用意することです。何かのようなもの:

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

    return App;
});

アプリの起動時にオブジェクトへの参照をインスタンス化して保存できます。

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

しかし、基本的にグローバル名前空間を持つことに戻っているため、これは貧弱な代替手段だと思います。これは、RequireJSが回避するのに役立つはずのものです。

上記のように、シングルトンモデルを避ける正当な理由はありますか?

4

2 に答える 2

5

うーん..しばらくの間、RequireJS モジュールをシングルトン オブジェクトとして使用してきましたが、問題はありませんでした。これは私が尋ねた関連する質問です。

requireJS モジュールをシングルトンとして使用するのは悪い習慣ですか?

お役に立てれば!

于 2012-09-21T06:04:48.583 に答える
3

名前空間を作成する必要はありません。最初の例では、シングルトンを作成します。このモジュールが必要なときはいつでも、モデルの同じインスタンスを取得します。したがって、新しい App モジュールを作成してそこにインスタンスを保存する代わりに、最初の例のモジュールを直接必要とします。アプリでこれを使用して、アプリのシングルトン インスタンスを作成しますが、これに落とし穴はありません。

于 2012-09-21T07:09:41.853 に答える