如何正确地将参数传递给RequireJS回调函数

How to correctly pass parameters to RequireJS callback function

本文关键字:RequireJS 回调 函数 参数传递 正确地      更新时间:2023-09-26

如何使用RequireJS将参数正确传递给静态函数?下面我需要运行函数render并将两个参数"node"answers"bus"传递给这个函数。

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);
    });         
}

请注意,RequireJS回调被称为async。

您的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变量实际上存在于您的代码中。)