2016-05-15 180 views
0

如何通過RequireJS將參數傳遞給靜態函數? 下面我需要運行函數render並傳遞給這個函數兩個參數「node」和「bus」。如何正確傳遞參數給RequireJS回調函數

var nodes = document.querySelectorAll('*[ondrawjs]'); 
var node; 
for(var i = 0; node = nodes[i]; i++) { 
    var render_name = node.getAttribute('ondrawjs');   
    require(['agera/' + render_name], function(module) { 
     module.render(node, bus); 
    });   
} 

回答

1

請注意RequireJS回調稱爲異步。

您的node變量的作用域爲周圍(全局)上下文,並且將具有循環期間它所指定的最新值。當回調被調用時,節點具有最後一個值。

你需要通過閉合功能的綁定變量:

function makeCallback(node, bus) { 
    return function(module) { 
     module.render(node, bus); 
    }; 
} 

現在外node變量「複製」裏面makeCallback(),它會保持其價值。

var nodes = document.querySelectorAll('*[ondrawjs]'); 
var node; 

for (var i = 0; node = nodes[i]; i++) { 
    var render_name = node.getAttribute('ondrawjs'); 
    require(['agera/' + render_name], makeCallback(node, bus)); 
} 

(注:我假設失蹤bus變量實際上存在於你的代碼)