2012-05-11 26 views
0

我正在構建一個帶有Backbone和Requirejs的單頁應用程序。如何使用requirejs創建模塊的實例並將其傳遞給另一個模塊?

現在我已經從我的模塊文件返回一個新的實例,與結尾的文件:

return new moduleName; 

這個工作確定,直到我不得不參數傳遞給集合的初始化方法。由於初始化是在創建實例時調用的,所以我將「new」從return語句中移開。

return mymoduleName; 

並實例在我的路由器的參數的集合:

myCollection = new library({paramname: "value"}); 

這確實是創造了「庫」的實例 - 在我的路由器引入的定義塊,但我怎麼把它傳遞到集合負責渲染的視圖?

我的觀點類具有相同的依賴於它的定義塊,並在其初始化我把它綁定到集合的復位:

this.collection = library; 
_.bindAll(this, 'render'); 
this.collection.bind('reset', this.render); 

這從集合類帶走了「新」的工作之前(其上追溯是毫無意義的!)但現在視圖永遠不會呈現,因爲它已經在路由器中實例化了 - 我如何將同一個實例傳遞給視圖?

回答

1

不要在其初始化方法中設置集合,但是無論您在哪裏實例化視圖(在您的情況下,路由器)。

var myCollection = new library({paramname: "value"}); 
var myView = new myCustomView({ 
    collection: myCollection 
}); 

如果myCollection是你需要從其他地方訪問,以及一個變量,你可以將它設置路由器(myRouter.myCollection = ...),你可以創建一個保存全局對象(MyAppGlobals)的模型上,或者你可以簡單地一個全局變量(不推薦)。

+0

謝謝,同時我得到它與以下工作 - 不完全確定,如果這實際上是你說的: 庫=新庫({參數名稱:「價值」}); myView =新視圖({collection:library}); 然後,在視圖的初始化中: 初始化:函數(opts){ \t this.collection = opts.collection; } – wannabeartist

+0

所以基本上,我有點困惑「不要在初始化中設置集合」 - 是不是在構造函數參數被處理? – wannabeartist

+0

初始化時無需執行'this.collection = opts.collection',如果您查看Backbone文檔,它會說:「創建新視圖時,您傳遞的選項將作爲this.options附加到視圖中,以備將來使用有幾個特殊選項,如果通過,將直接附加到視圖:model,collection,el,id,className,tagName和attributes。「 (http://documentcloud.github.com/backbone/#View-constructor) – slurmomatic

相關問題