1

我正在使用 HighCharts 显示包含折线图和条形图的图形。默认情况下,在您单击系列标题之前,条形系列不可见。我有代码可以即时更新条形图,但我注意到在图表不可见时我无法获取现有信息。

当我从服务器获取数据时,我会尝试更新任何现有的点,如果有的话,添加新的点。如果系列可见,则此代码效果很好,但如果系列不可见,则chart.series[1].data[idx]返回undefined。单击该系列将显示图表,因此我知道数据在某处。我究竟做错了什么?

if (chart.series[1].data[idx] && chart.series[1].data[idx].y != inRate)
{   
    chart.series[1].data[idx].update(inRate);
    redraw = true;
}
else if (!chart.series[1].data[idx])
{
    var time = IntervalToTime(i, doorInterval);
    chart.series[1].addPoint([time, inRate], false, false);
    redraw = true;
}

经过一番调查,我取得了一些进展。显然,在该系列至少可见一次之前,数据数组不会被填充,因此您无法检查那里的数据是否存在。我发现了一个处理过的数据队列,其中保存了数据,这似乎可以工作,但是在尝试调用时执行此方法会导致错误chart.series[1].data[idx].update(inRate)

if (chart.series[1].processedXData[idx] && chart.series[1].processedYData[idx] != inRate)
{
    chart.series[1].data[idx].update(inRate);
    redraw = true;
}
else if (!chart.series[1].processedXData[idx])
{
    var time = IntervalToTime(i, doorInterval);
    chart.series[1].addPoint([time, inRate], false, false);
    redraw = true;
}
4

1 回答 1

0

经过一番调查,我发现了这个问题。显然,在data该系列至少可见一次之前,该数组不会被填充,因此您无法检查那里的数据是否存在。我发现了一个处理过的数据队列,其中保存了数据,这似乎有效。

if (chart.series[1].processedXData[idx] && chart.series[1].processedYData[idx] != inRate)
{
    chart.series[1].data[idx].update(inRate);
    redraw = true;
}
else if (!chart.series[1].processedXData[idx])
{
    var time = IntervalToTime(i, doorInterval);
    chart.series[1].addPoint([time, inRate], false, false);
    redraw = true;
}
于 2013-03-01T09:28:11.353 回答