2014-09-22 77 views
1

我對require.jsBackbone.js略微熟悉,他們一起使用了大約一年,而Backbone.Marionette相對較新,儘管我對它可以帶來什麼感興趣。主幹木偶上的混亂,需要互動才能獲得依賴關係

在尋找項目結構的例子(我可以有點癡迷於這個東西),我發現https://github.com/BoilerplateMVC/Marionette-Require-Boilerplate和其他類似的例子。

東西一直困擾着我:他們app.js文件,他們返回參照木偶應用的實例,即:

var app = new Backbone.Marionette.Application(); 
app.addInitializer(...); 
... 
return app; 

在許多部件,它們app.js通過require.js參考和使用方法如下:

define([..., 'app'], function (... , App) { 
    App.someProperty(...); 
}); 

現在,這裏的東西我不理解:我一直假設下,在他們代碼因爲它返回應用程序的實例,而不是比如說修改的原型或其擴展,因此實際上更像是工廠而不是

因此,當它們引用app.js,不是他們實際上創造了一個全新的例如而不是訪問某種共享實例?沒有什麼建議app.js正在他們的代碼中返回一個單例。

然而,它的工作原理,顯然我是一個困惑的人。

那麼,這是爲什麼這樣工作?

回答

3

這是可行的,因爲對象是通過JavaScript中的引用傳遞的,並且require.js只加載一次每個依賴項。然後,app.js返回一個初始化的實例,並且需要'app'的每個其他模塊都獲取對同一對象的引用。

這不是一個工廠,它只是一個初始化的應用程序對象實例。

+0

謝謝...所以澄清,1)這是因爲'require.js'加載依賴關係(只有一次,除非被要求做別的事情),以及2)我應該依靠它還是使用單身在我自己的代碼? – 2014-09-22 11:24:33

+0

它像一個單例一樣工作,因爲一旦你第一次包含'app.js'你有一個初始化的實例。然後,對於'app.js'的每個其他要求都引用相同的初始化實例,因爲require.js不會加載兩次相關性,並且JavaScript會通過引用傳遞該對象。 – Yura 2014-09-22 11:27:24