繁体   English   中英

将其他参数注入JavaScript回调函数

[英]Inject additional parameters into a JavaScript callback function

我花了很多时间试图找到一个解释我问题的标题,但并不容易。 随意建议。

代码如下:我正在使用谷歌可视化为我的图表创建注释。 注释列使用自定义函数。 这是谷歌允许的,该功能将收到2个参数:dt和row。 问题是:下面应该是什么(dt,row,i),以便我得到默认的dt,函数通常接收的行和我的附加参数i?

view = new google.visualization.DataView(chartData);
var arr = [0];

for (var i = 1; i < chartData.getNumberOfColumns() ; i++) 
{
    arr.push(i);
    arr.push({role: "annotation", type: "string", calc: (function (dt, row,i)  {
        if (typeof (dt.getValue(row,i)) == "number" && dt.getValue(row,i) == 0) 
        {
            return ""; 
        }
        else 
        { 
            return dt.getValue(row, i).toString; 
        }
    })(dt, row, i)
});
}

view.setColumns(arr);
chartData = view.toDataTable();

我不知道我是否正确,但你可以使用更高阶的功能:

var createCalc = function(i){
    return function(dt, row){
        if (typeof (dt.getValue(row,i)) == "number" && evs == 0) { return ""; }
        else { return dt.getValue(row, i).toString; }
    };
}

...
arr.push({role: "annotation", type: "string", calc: createCalc(i)});

假设您有一个函数createCalc ,它从回调中接收两个参数dtrow ,并且您想要将其他参数i添加到它。 创建一个函数,

function createCalc(i, dt, row) {
  //functin code
}

并传递给,

arr.push({role: "annotation", type: "string", calc: createCalc.bind(null, i)});

bind将返回一个向其添加参数的新函数。 第一个参数,我传递的是null ,它实际上将被赋值给this变量,如果你在你的函数中使用this ,则传递适当的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM