为什么spurios alert()会导致Google Chart正确绘制?

时间:2015-11-07 20:41:04

标签: javascript google-visualization

我试图在同一网页上绘制两张Google图表。

第二个图表的代码如下所示

function chart2() {
  /* second chart (scatter plot) */
  var data2 = new google.visualization.DataTable();
  data2.addColumn('number', 'Date');
  data2.addColumn('number', 'Sold Price');

  var map = /*[[${worthTemplateData.pricingInfo['marketHistory']}]]*/ [];
  map.forEach(function (item) {
     data2.addRows([ [item.date, item.origPrice] ]);
  });

  alert('Please wait');

  var options = {
     width: 900,
     height: 500,
     chart: {
     title: 'Price History',
     subtitle: 'For similar-size units'
     },
     hAxis: {title: 'Date'},
     vAxis: {title: 'Sold Price'}
  };

  var chart2 = new google.charts.Scatter(document.getElementById('google-chart2'));
     chart2.draw(data2, google.charts.Scatter.convertOptions(options));
}

有效。

但是一旦删除alert('Please wait');行,它就不再有用了!图表所在的屏幕区域为空。

我怀疑存在一些时间问题,即使JS可能是"单线程"。

更令人费解的是,如果我更改订单,只会加载其他图表:

google.load("visualization", "1.0", {packages: ["bar", "scatter"]});
google.setOnLoadCallback(drawCharts);

function drawCharts() {
        chart2();
        chart1();
}

解决方法是什么?

1 个答案:

答案 0 :(得分:0)

绘制多个材质图表时出现问题。 您可以切换到Classic Sc​​atter Charts:google.charts.Scatter - > google.visualization.ScatterChart或尝试延迟:

function doSetTimeOutDrawChart(chart, data, options, delay){
    setTimeout(function () { 
        chart.draw(data, options);
    }, delay);
} 

就像在这个例子中: jsFiddle