我花了很多时间试图找到一个解释我问题的标题,但并不容易。随意建议。
代码如下:我正在使用谷歌可视化为我的图表创建注释。注释列使用自定义函数。这是谷歌允许的,该功能将收到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();
答案 0 :(得分:2)
我不知道我是否做对了,但你可以使用更高阶的功能:
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)});
答案 1 :(得分:0)
假设您有一个函数createCalc
,它会从回调中接收两个参数 dt 和行,并且您想添加其他参数 i 到它。
创建一个函数,
function createCalc(i, dt, row) {
//functin code
}
并传递给它,
arr.push({role: "annotation", type: "string", calc: createCalc.bind(null, i)});
bind
将返回一个向其添加参数的新函数。
第一个参数,我已经过null
,它实际上将被分配给this
变量,如果您在函数中使用this
则传递适当的值。