2012-09-21 7 views
8

私はいくつかのビューがアクセスすると、私はすぐにそうようにそれをインスタンス化してるモデルモジュールの定義で、これを達成するために必要モデルがあります:私は本当にこのモデルの1つのインスタンスを必要とするRequireJSを持つシングルトンバックボーンモデル:アンチパターン?

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が回避することになっているものです。

上記のようにシングルトンモデルを使用しないようにするための選択肢はありますか?

+0

最初の例でやったように完全にうまくいくはずです。 –

答えて

3

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

関連する問題