0

我正在尝试将变量传递给谷歌可视化方法,但如果我使用变量,它会不断出现错误,但如果我输入字符串,它会正常工作。我在这里想念什么?

这有效:

var filterdata = new google.visualization.DataView(data)
filterdata.setRows(
  filterdata.getFilteredRows([{column: 0, value: 'someval'}])
);

这不起作用:

filteredrows = "[{column: 0, value: 'someval'}]";

var filterdata = new google.visualization.DataView(data)
filterdata.setRows(
  filterdata.getFilteredRows(filteredrows)
);

我得到的错误是:

“未捕获的错误:columnFilters 必须是非空数组”

编辑:

我正在尝试构建一个数组/字符串以将所有仪表板控件状态作为 getfilteredrows() 的过滤条件传递。下面是我用来构建数组的代码。我也尝试过创建一个字符串,但无论哪种方式都不被接受......

control_states = [ctrl1.getState(),ctrl2.getState(),ctrl3.getState()];
var filteredrows = {};
var cnt = 0;
for (var i = 0; i < control_states.length; i++) {
  var picker_state = control_states[i]
  for (var j = 0; j < picker_state.selectedValues.length; j++) {
    filteredrows[cnt] = "column: " + i + ", value: '" + picker_state.selectedValues[j] + "'";
    cnt += 1;
  };
};
4

3 回答 3

1

一个是 JSON,另一个是实际数组。

把第一行写成这样

var filteredrows = [{column: 0, value: 'someval'}];

如果您filteredrows实际上是一个字符串并且您无法更改它,JSON.parse请先使用它

var filterdata = new google.visualization.DataView(data)
filterdata.setRows(
  filterdata.getFilteredRows(JSON.parse(filteredrows))
);
于 2013-08-19T07:12:38.820 回答
1

我猜该方法 getFilteredRows 接受一个有效的数组而不是一个字符串。我建议在发送字符串之前使用JSON.parse 。即类似的东西:

filterdata.getFilteredRows(JSON.parse(filteredrows));
于 2013-08-19T07:13:46.703 回答
0

这就是我解决问题的方法,感谢 naomik 和 Krasimir 为我指明了正确的方向!

control_states = [ctrl1.getState(),ctrl2.getState(),ctrl3.getState()];

var filteredrows = [ ];
var cnt = 0;
for (var i = 0; i < control_states.length; i++) {
  var picker_state = control_states[i]
  for (var j = 0; j < picker_state.selectedValues.length; j++) {
    filteredrows[cnt] = [ ];
    filteredrows[cnt]["column"] = i;
    filteredrows[cnt]["value"] = picker_state.selectedValues[j];
    cnt += 1;
  };
};

var filterdata = new google.visualization.DataView(data)
filterdata.setRows(
  filterdata.getFilteredRows(filteredrows)
);
于 2013-08-20T05:34:06.863 回答