2014-11-03 124 views
-2
的加載順序

我定義模塊下面通過使用RequireJS:RequireJS依賴性

define('mod1', ['jquery'], function($){ 
    return function mod1(){ 
     //do something 
    } 
}); 

define('mod2', ['jquery','jquery.plugin1','mod1'], function($, mod1){ 
    var mod2 = mod2||{}; 
    mod2.A = function(){ 
     return new mod1(); 
    } 
}) 

如果限定mod2像如上所述,當代碼執行到new mod1(),它會拋出mod1 is undefined。如果我像下面那樣定義mod2,則工作正常。

define('mod2', ['mod1','jquery','jquery.plugin1'], function(mod1,$){ 
    var mod2 = mod2||{}; 
    mod2.A = function(){ 
     return new mod1(); 
    } 
}) 

任何人都可以解釋加載依賴關係時的原因和RequireJS的工作原理嗎?

+0

呃'jquery.plugin1'依賴返回'undefined'。 – 2014-11-03 02:47:24

+0

對不起,我不明白爲什麼jquery.plugin1返回undefined。如果使用片段2,它運行良好,也可以使用jquery.plugin1 – user1438980 2014-11-03 02:55:32

回答

1

這不起作用:

define('mod2', ['jquery','jquery.plugin1','mod1'], function($, mod1){ 

因爲你給你的匿名函數的參數只是將其之前獲得相同的順序從依賴關係列表中的值所以$說法得到模塊的價值jquerymod1參數從jquery.plugin1獲取其值,並且模塊mod1的值作爲第三個參數傳遞,但您必須使用自動變量arguments才能得到它,因爲您沒有指定第三個參數。

注意jQuery插件通過修改$而不是由返回一個值,以便作爲一個模塊插件jquery.plugin1的值是undefined安裝自己。

當你做到這一點,它的工作原理:

define('mod2', ['mod1','jquery','jquery.plugin1'], function(mod1,$){ 

因爲依賴性的順序正確地體現在參數的順序。

+0

哦,我明白了。我只是認爲所有jquery插件將被加載在一起並用作'$'。感謝您的解釋。 – user1438980 2014-11-04 01:51:59