2014-05-13 4 views
0

Ci-dessous vous pouvez voir quatre fichiers requireJS de base. Comment puis-je avoir plusieurs vues de Backbone.js qui partagent toutes une collection qui a été initiée et récupérée ailleurs?Backbone, requirejs, vues multiples, une collection

S'il vous plaît noter

Je sais que je peux passer la collection app.js mais je voudrais éviter de le faire depuis que j'aurai probablement de nombreuses collections qui devront être utilisés dans de nombreuses vues, et je ne veux pas passer chacun d'eux App.js.

Collection.js

return Backbone.Collection.extend({ 
    url: '...' 
}); 

app.js

var collection = new Collection(); 

$.when(collection.fetch()).done(function(){ 
    new View1(); 
    new View2(); 
}); 

View1.js

define(['Collection'], function(Collection){ 
    return Backbone.View.extend({ 
     initialize: function(){ 
      console.log('Need the initiated, fetched collection here...'); 
     }); 
    }); 
}); 

View2.js

define(['Collection'], function(Collection){ 
    return Backbone.View.extend({ 
     initialize: function(){ 
      console.log('Need the initiated, fetched collection here...'); 
     }); 
    }); 
}); 

Répondre

0

réponse rapide: RequireJS exécute le code du corps de la fonction et une fois la déclaration return seul plusieurs fois. Vous pouvez, par conséquent, créer une instance de collection et la renvoyer à toutes les personnes qui en ont besoin.

Collection.js

var CollectionConstructor = Backbone.Collection.extend({ 
    url: '...' 
}); 
var CollectionInstance = new CollectionConstructor(); 
return CollectionInstance; 

Sinon, si vous voulez plus d'une instance de CollectionInstance courir, et ne veulent pas passer à la vue, je ne crois pas quelque chose à court de variables globales aidera. Cela ressemblerait à ceci:

Globals.js

var AppGlobals = AppGlobals || {}; 
AppGlobals.oneSet = new Collection(); 
AppGlobals.anotherSet = new Collection(); 

Vous pouvez maintenant avoir votre point de vue dépendent Globals.js et d'y accéder à partir d'ici. Selon votre utilisation, l'un ou l'autre de ces deux devrait fonctionner. Gardez à l'esprit que dans la seconde approche, votre collection.js n'est pas modifiée.