下面你可以看到四个基本的requireJS文件。我怎样才能拥有多个Backbone.js视图,这些视图将共享一个已在其他位置启动和获取的集合?
请注意
我知道我可以在 App.js 中传递该集合但是我想不要这样做,因为我可能会有很多需要的集合在许多视图中使用,我不想在 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...');
});
});
});
答案 0 :(得分:0)
快速回答:RequireJS运行一次函数体代码,单独运行return
语句多次。因此,您可以创建集合实例并将其返回给需要它的每个人。
<强> Collection.js 强>
var CollectionConstructor = Backbone.Collection.extend({
url: '...'
});
var CollectionInstance = new CollectionConstructor();
return CollectionInstance;
或者,如果你想要运行多个CollectionInstance实例,并且不想将它传递给视图,我不相信任何缺少全局变量的东西都会有所帮助。那看起来像是:
<强> Globals.js 强>
var AppGlobals = AppGlobals || {};
AppGlobals.oneSet = new Collection ();
AppGlobals.anotherSet = new Collection ();
您现在可以让您的视图依赖于Globals.js并从此处访问它们。根据您的使用情况,这两者中的任何一个都应该有效。请记住,在第二种方法中,您的Collection.js未经修改。