setOnLoadCallback在循环中不起作用

时间:2016-12-08 09:55:28

标签: javascript google-visualization

我正在使用谷歌图表并遇到一些误解的东西。

所以简而言之,我有很多图表要绘制,而不是列出它们,我想做一个循环。但是,当我转换"呼叫列表"进入for..in循环,只有数组中的最后一个元素似乎"工作"。

在那里,你可以看到一个名为" allData"的对象。其中包含许多数据以及在" OnLoad"触发了。

{{1}}

如果我取消注释最后3行,一切正常。 我读到它似乎已经知道谷歌图表和循环的麻烦,但无法找到确切的情况。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

setOnLoadCallback只应在每页

时调用

目的是让您知道google已完成加载,以及dom

它需要引用到函数

google.charts.setOnLoadCallback(drawChart);

不是函数的结果

google.charts.setOnLoadCallback(drawChart());

但是,建议不要使用 setOnLoadCallback

callback放入load 而不是

首先加载谷歌,然后再不用担心了......

google.charts.load('current', {
  callback: drawChart,
  packages: ['corechart']
});

答案 1 :(得分:0)

我终于发现了。据我所知,

google.charts.setOnLoadCallback

应该只调用一次,所以我改了

for (var value in allData) {
   google.charts.setOnLoadCallback(function() { (allData[value]['function'])(allData[value]) });
};

通过

google.charts.setOnLoadCallback(function() {
        for (var value in allData) {
           (allData[value]['function'])(allData[value]);
        };
      });

现在好了;)

答案 2 :(得分:-1)

我认为你必须只调用一次setOnLoadCallBack

google.charts.setOnLoadCallback(myCallBackFunction());
myCallBackFunction = function(){
    for (var value in values) {
        var data = //use value or what you want
        var options = //use value or what you want
        var chart = new google.visualization. //etc etc
        chart.draw(data,options)
    }
}