Backbone,requirejs,多个视图,一个集合

时间:2014-05-13 10:53:56

标签: backbone.js requirejs

下面你可以看到四个基本的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...');
        });
    });
});

1 个答案:

答案 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未经修改。