2012-09-21 18 views
8

ich ein Modell, das von verschiedenen Ansichten zugegriffen werden muss, und dies in der Definition des Modellmoduls zu erreichen, ich bin es sofort wie so Instanziierung:Singleton Backbone Modelle mit RequireJS: Anti-Pattern?

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

    return new Foo(); 
}); 

ich wirklich nur noch eine Instanz dieses Modells - Im Moment ist das so. Die Umgehung dafür, soweit ich weiß, ist ein separates App Modul. Etwas wie:

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

    return App; 
}); 

, auf das Sie instanziiert und speichern können Verweise auf Objekte auf app starten:

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

aber ich mag dieses Gefühl, eine schlechte Alternative, da Sie im Wesentlichen gehen wieder ein zu haben, globaler Namespace - etwas, das RequireJS vermeiden sollte.

Gibt es Alternativen und gibt es einen guten Grund, Singleton-Modelle wie oben beschrieben zu vermeiden?

+0

Sie sollten völlig in Ordnung sein, wie Sie es in Ihrem ersten Beispiel getan haben. –

Antwort

3

Sie müssen die Namespace-Sache nicht erstellen. Ihr erstes Beispiel erstellt einen Singleton. Wann immer Sie dieses Modul benötigen, erhalten Sie dieselbe Instanz Ihres Modells. Anstatt also ein neues App-Modul zu erstellen und die Instanz dort zu speichern, benötigen Sie nur das Modul Ihres ersten Beispiels. Wir verwenden es in unserer App, um eine Singleton-Instanz unserer App zu erstellen, und ich kann damit keine Fallstricke sehen.

Verwandte Themen