2014-09-26 89 views
0

我正在學習require.js來組織backbone.js模板。當我在互聯網上搜索時,我有幾個教程。我在那裏發現不同的實現。這就是爲什麼我無法理解main.js文件的代碼。理解require.js以實現backbone.js

//file name main.js 

    require.config({ 
    paths: { 
    jquery: 'libs/jquery/jquery', 
    underscore: 'libs/underscore/underscore', 
    backbone: 'libs/backbone/backbone' 
    } 
}); 

require([ 
    'app', 
], function(App) 
{ 
    App.initialize(); 
}); 

特別是我無法理解第二部分。也就是說

要求([ '應用', ],功能(應用程序) { App.initialize(); });

這是什麼意思App.initialize();

+0

許多加載require的應用程序需要在加載後觸發init()方法或其他類型的應用程序。如果你不需要它,就把它放下。 – wwwmarty 2014-09-26 13:12:47

+0

感謝@MartyMcKeever的回覆。這是什麼意思** App.initialize(); ** ??是否有任何名爲** initialize()**的函數? – 2014-09-26 13:14:43

+0

不是骨幹人物,但是這個例子假定無論你需要什麼(在函數中本地命名的App)都有一個initialize()方法,需要在啓動時立即調用它。您所需的應用程序可能有也可能沒有這樣的啓動方法,並且可以命名任何東西。通常它被稱爲init(); – wwwmarty 2014-09-26 15:49:07

回答

2
require([ 'app', ], // this means you have a file called app.js, 
        // which is a require module 
], function(App) // This means after loadind, App will be an alias 
       // for the module.exports object 
{ 
    App.initialize(); // This means the module exposes an initialize function 
        // (some will call it method), that is invoked 
}); 
+0

謝謝@laruiss。 ** initialize()**是一個主幹函數(http:// backbonejs。org /#Model-constructor),我對嗎? – 2014-09-26 14:13:40

0

該結構是異步模塊定義或AMD的格式。它基本上是一個用於以異步方式在應用程序中加載模塊(本質上是Javascript文件)的API。

過去,這通常是使用頁面底部的<script>標籤完成的。問題是那些被同步加載(一個接一個)並且處理文件之間的依賴關係可能是繁重的。 AMD是能夠異步加載Javascript文件的一個建議標準。

一些基本的內容本(使用您的代碼作爲示例):

您調用函數require,它接受兩個參數:

  1. 字符串數組表示路徑的文件(或別名到路徑)。這些將是文件需要的依賴關係(考慮用Java導入)

  2. 加載在第一個參數中指定的依賴關係之後由Require調用的回調函數。需求將傳入您在第一個參數中指定的實際文件。因此,在你的榜樣,你是在告訴需要「走出去,並加載app.js文件」,當其加載,該文件傳進我的回調函數

所以在這個代碼(這是你的回調函數):

function(App) { 
    App.initialize();      
} 

App代表JavaScript文件app.js的公開API。所以當你看到諸如App.initialize()之類的東西時,意思就是文件app.js正在公開一個名爲initialize的函數,該文件正在調用。