2013-03-01 55 views
1

改變更新數據點,我使用HighCharts顯示包含線和柱狀圖的曲線圖。默認情況下,直到您點擊系列標題後,小節系列纔會顯示。我有代碼更新欄上的酒吧,但我注意到,我無法得到現有的信息,而圖表是不可見的。已在invisble 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; 
} 
+0

由於性能僅可見點/系列進行更新,如果你真的需要更新的東西儘量直接在'series.options.data'更新點(覆蓋該數組中的值)。此外,任何jsFiddle總是讚賞。 – 2013-03-01 12:48:08

+0

快速問題,如果你能回想起你的問題,'inRate'代表什麼?另外,這段代碼是否放置在數據點的循環中? – Tanner 2014-10-09 15:46:42

+0

Hi'inRate'基本上是我的'Y'值,圖表是測量流量或速度。是的,這是在一個for循環 – Chris 2014-10-09 16:06:11

回答

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; 
}