2013-04-08 19 views
1

我寫一個JavaScript模塊裝載其中一個循環內定義不同的模塊..requirejs多個需要在一排

function(moduleList) { 
    var arr = []; 
    for (i = 0, l = moduleList.length; i < l; i++) { 
     var m = moduleList[i]; 

     define(m.guid, function() { 
      return { 
       container : m.container, 
       configuration : m.configuration, 
       moduleId : m.id 
      } 
     }); 
     arr[i] = m; 
    } 
} 

後直接,有下一個for循環中,我「需要」之前定義的模塊..

for (i = 0, l = arr.length; i < l; i++) { 
    require([arr[i].id,arr[i].guid], function(module, moduleConfiguration) { 
     core.utils.log("m.id: " + moduleConfiguration.moduleId); 
     core.utils.log("init " + moduleConfiguration.moduleId, moduleConfiguration); 

     module.init(moduleConfiguration); 
    }); 
} 

現在的問題是,每一個裏面「規定」阻止moduleConfiguration和模塊是一樣的。要做出一個「規定」稱,它使用不同的ID,但結果總是相同的。

有人知道如何找到一個方法嗎?

+0

[JavaScript閉合內循環 - 簡單實用示例]的可能重複(http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) – 2015-03-29 17:17:13

回答

1

我覺得你定義功能應該是這樣的,讓「M」是正確的作用域:

function(moduleList) { 
    var arr = [], i; // declare i!!!! 
    function def(m) { 
     define(m.guid, function() { 
      return { 
       container : m.container, 
       configuration : m.configuration, 
       moduleId : m.id 
      } 
     }); 
    } 

    for (i = 0, l = moduleList.length; i < l; i++) { 

     var m = moduleList[i]; 

     def(m); 
     arr[i] = m; 
    } 
} 

在你的代碼,同一個變量「m」是所有這些模塊回調之間共享。通過引入另一個函數(和另一個範圍),可以確保每個回調都有自己的副本。

相關問題