2012-09-21 19 views
8

que tienen un modelo que debe ser visitada por varios puntos de vista y para lograr esto en la definición del módulo modelo Estoy crear instancias de inmediato, así:Modelos Singleton Backbone con RequireJS: ¿antipatrón?

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

    return new Foo(); 
}); 

lo único que realmente necesitan una instancia de este modelo - ahora mismo eso es. La solución para esto hasta donde yo sé es tener un módulo App por separado. Algo así como:

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

    return App; 
}); 

en el que se puede crear una instancia y almacenar referencias a objetos en el arranque de aplicaciones:

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

pero siento que esta es una mala alternativa ya que esencialmente está volviendo a tener una espacio de nombres global, que es algo que RequireJS supuestamente ayuda a evitar.

¿Hay alguna alternativa y hay alguna buena razón para evitar tener modelos singleton como he descrito anteriormente?

+0

Debería estar completamente bien tal como lo ha hecho en su primer ejemplo. –

Respuesta

3

No necesita crear el espacio de nombres. Tu primer ejemplo crea un singleton. Siempre que requiera este módulo, obtendrá la misma instancia de su modelo. Entonces, en lugar de crear un nuevo módulo de aplicación y guardar la instancia allí, solo requiere el módulo de su primer ejemplo directamente. Lo usamos en nuestra aplicación para tener una instancia única de nuestra aplicación y no veo ningún inconveniente con esto.

Cuestiones relacionadas