我正在尝试通过使用数据库中的当前数据生成一个新数组来更新Highchart系列。但是由于某种原因,我一次只能找到有关遍历数据的信息。一旦创建了图表,它只会再次重新运行相同的代码,因此标签等不会更改-仅[pointStart]和[data]会更改。
有没有办法整体上更新所有数据?我也没有设法使for循环正常工作。
function generateSeries(data){ var cData = []; var rollup = data.rollupData; cData['type'] = 'line'; cData['pointStart'] = convertDateTime(data.lastMinute); cData['pointInterval'] = 60 * 1000; for(var i in rollup){ var x = new Array(); var v = rollup[i].rttSystem; switch(v){ case('line'): var vn = ' (L)'; break; case('node'): var vn = ' (N)'; break; case('module'): var vn = ' (M)'; break; default: var vn = ''; } x['name'] = rollup[i].rollupName + vn; x['data'] = rollup[i].kpiData; cData.push(x); } return cData; }
数组的输出看起来像[0:[‘name’:’California’,’data’:[0.002,0.003 …],1:[‘name’:’Oklahoma’,’data’:[0.001, 0.002 …],’type’:’line’,’pointStart’:’‘,’pointInterval’:60 * 1000]
var chart = new Highcharts.Chart({ chart: { ... }, series: generateSeries(data) }, function(chart){ setInterval(function(){ var newSeries = generateSeries(data); // Udate the series again with the current data },60000); } });
更新:这是系列,但不是pointStart。
if(chart.series.length > 1){ var s = 0; for(var i in newSeries){ chart.series[s].setData(newSeries[i].data); chart.series[s].pointStart = newSeries[i].pointStart; s++; } }else{ chart.series[0].setData(newSeries[0].data); chart.series[0].pointStart = newSeries[0].pointStart; }
要更新图表,我通常这样做:
chart.series[0].update({ pointStart: newSeries[0].pointStart, data: newSeries[0].data }, true); //true / false to redraw
尝试在更新后调用重绘。