2014-05-13 129 views
0

下面你可以看到四個基本的requireJS文件。我如何擁有多個Backbone.js視圖,這些視圖將共享一個已在其他地方啓動並獲取的集合?Backbone,requirejs,多個視圖,一個集合

請注意

我知道我可以通過集合中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

快速回答: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是未修改的。

相關問題