我對require.js
和Backbone.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正在他們的代碼中返回一個單例。
然而,它的工作原理,顯然我是一個困惑的人。
那麼,這是爲什麼這樣工作?
謝謝...所以澄清,1)這是因爲'require.js'加載依賴關係(只有一次,除非被要求做別的事情),以及2)我應該依靠它還是使用單身在我自己的代碼? – 2014-09-22 11:24:33
它像一個單例一樣工作,因爲一旦你第一次包含'app.js'你有一個初始化的實例。然後,對於'app.js'的每個其他要求都引用相同的初始化實例,因爲require.js不會加載兩次相關性,並且JavaScript會通過引用傳遞該對象。 – Yura 2014-09-22 11:27:24