2016-05-15 16 views
0

RequireJSで静的関数に渡す正しいパラメータはどのようにしますか? 以下私は関数レンダリングを実行し、この関数に2つのパラメータ "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変数は、周囲(グローバル)コンテキストにスコープされ、ループ中にアシストされた最新の値を持ちます。コールバックが呼び出されると、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変数は、実際にあなたのコード内に存在すると仮定)

関連する問題