2012-03-07 61 views
2

最好將它放在全局對象或View實例中?如果我把它放在全局如:window.todos = new Todos(),它會污染全局對象,如果有很多集合;但是,將它放在視圖內可能會使事情有點混亂)我應該把Collection實例放在Backbone.js中?

根據您的經驗,放置它的最佳方式是哪裏?

回答

3

我認爲這真的取決於您的應用程序。我一般都做的是建立一個命名空間的應用程序,並把收藏在那裏,以及訪問量:

// namespace for the application 
var app = {}; 

// collection classes are also within the namespace 
app.ToDos = Backbone.Collection.extend({ ... }); 

// and collection instances are in the namespace as singletons 
app.todos = new app.ToDos(); 

對於大型應用程序時,你可能會走的更遠,建立子命名空間模型類,視圖類,路由器類和應用程序實例。有幾個優勢,這一點,雖然他們都不是真正的關鍵:

  • 有在app命名空間中可用的集合使他們能夠從多個視圖,如果必要的話

  • 調試時,你有被引用訪問控制檯中的集合

  • 爲您的應用程序建立新的名稱空間允許您添加大量新的全局變量,而不會污染全局名稱空間或擔心與其他庫的不良交互

最後一點對於您的應用程序命名空間來說是一個非常好的參數,但並不一定意味着您的集合需要位於命名空間的頂層,或者全局可用。主要問題是,您能夠訪問特定父視圖(或父模型)之外的集合是多麼重要。如果您確定該集合是一次性的,那麼將它完全放在應用程序名稱空間中可能會更清晰。

+0

很好的答案!但是......不會讓他們成爲「單身人士」,這會讓你在視圖中「結合」他們。而不是說(在視圖的上下文中):'this.collection ...'你必須說'window.app .iAmACollectionInstance ...',如果連這個名稱都改變了,你就必須在整個應用程序中找到/替換? ps:我是JavaScript和Backbone的初學者。 – 2012-03-07 22:35:15

+0

不,你仍然可以在視圖中引用'this.collection' - app.myCollectionInstance屬性只是一個指向你實例化視圖時傳入的同一個集合的指針:'new app.MyView({ collection:app.myCollectionInstance});' – nrabinowitz 2012-03-07 22:38:31

+0

ohhhhhh!我忘了我可以這樣做:)謝謝! :) – 2012-03-07 22:39:41

相關問題