我正在尝试实施Google Graph但是这段代码有什么不对,它取的是对象的最后一个值。
var colEvn = ["AAA","BBB","CCC"];
var viewObj = new Object();
var func = function viewFunc(dt, row) {
return (dt.getValue(row, 1) == colEvn[j]) ? dt.getValue(row, 2) : null;
}
var viewObj = new Object();
for (var j = 0, m = colEvn.length; j < m; j++) {
viewObj.type = 'number';
viewObj.label = colEvn[j];
viewObj.calc = func
}
var view = new google.visualization.DataView(data);
view.setColumns([0, viewObj]);
预期结果应如下:
{
type: 'number',
label: 'AAA',
calc: function (dt, row) {
return (dt.getValue(row, 1) == 'AAA') ? dt.getValue(row, 2) : null;
}
}, {
type: 'number',
label: 'BBB',
calc: function (dt, row) {
return (dt.getValue(row, 1) == 'BBB') ? dt.getValue(row, 2) : null;
}
}, {
type: 'number',
label: 'CCC',
calc: function (dt, row) {
return (dt.getValue(row, 1) == 'CCC') ? dt.getValue(row, 2) : null;
}
}
答案 0 :(得分:1)
迭代每次都会覆盖同一个对象,似乎应该通过可视化API传递一个对象数组。
阅读documentation,它似乎也应该将一个对象传递给setColumns
函数的列索引,所以你可能也必须在循环中这样做
var view = new google.visualization.DataView(data);
for (var j = 0, m = colEvn.length; j < m; j++) {
var viewObj = {
type: 'number',
label: colEvn[j],
calc: func
};
view.setColumns([j, viewObj]);
}
答案 1 :(得分:0)
好的,第一点就是你不能为你的所有列创建一个单独的函数,我已经改变了它:
var colEvn = ["AAA", "BBB", "CCC"];
var columns = [0];
for (var j = 0, m = colEvn.length; j < m; j++) {
var viewObj = {};
viewObj.type = 'number';
viewObj.label = colEvn[j];
viewObj.calc = function viewFunc(dt, row) {
alert("column label : " + viewFunc._colEvn);
return (dt.getValue(row, 1) == viewFunc._colEvn) ? dt.getValue(row, 2) : null;
};
viewObj.calc._colEvn = colEvn[j];
columns.push(viewObj);
}
var view = new google.visualization.DataView(data);
view.setColumns(columns);
如果alerts
执行代码及其显示的内容,请告诉我。