2015-04-21 40 views
0

我做一樣的東西:Hichcharts-隱藏系列沒有更新地塊兩次後,再次顯示

  1. 有一個複選框更改劇情的數據
  2. 時被選中該複選框/未選中,更新系列數據陣列相應地調用series[i].update()

但我有一個問題,當系列被用戶隱藏並嘗試選中複選框然後取消選中,然後重新顯示系列時,系列不會再顯示。

請注意,如果我只檢查一次盒子,沒有問題發生,只有當我們隱藏系列後不止一次檢查盒子時,纔會出現問題。

我有重現該問題HERE (JSFiddle)

代碼更新情節是:

if (chart) { 
    for (var i = 0; i < chart.series.length; i++) { 
     //chart.series[i].setVisible(true, true); // Note that if I add this code, then no problem 
     chart.series[i].update({ 
      data: dataArray[i] 
     }); 
    } 
} 

回答

0

的問題是,您基於Highcharts產生點。當系列被隱藏時,點不存在,您爲一系列設置空數據。換句話說,它看起來像這樣:chart.series[i].setData([]);

我建議爲數據使用單獨的數組,並將其用於計算。總體思路:http://jsfiddle.net/pGuEv/37/(我知道,它的工作原理有點不同,但說明應該如何寫的)

var origData = [ 
    [11, 22, 33, 44, 55, 66, 77, 88], 
    [10, 20, 30, 40, 50, 60, 70, 80] 
]; 
$('#container').highcharts({ 
    series: [{ 
     data: origData[0].slice() 
    }, { 
     data: origData[1].slice() 
    }] 
}); 

及更高版本:

 for (var i = 0; i < origData.length; i++) {  // original data 
      var onePlotData = []; 
      var sum = 0; //前面點的合計值s 
      for (var j = 0; j < origData[i].length; j++) { // original data 
       var value = origData[i][j];    // original data 
       var point = { 
        //x: value.x, 
        y: state ? value + sum : value - sum, 
        //total: value.total 
       } 
       sum = point.y; 
       onePlotData.push(point); 
      } 
      dataArray.push(onePlotData); 
     } 
+0

爲什麼只是第二次,該系列數據變空?我不能在我的實際功能中使用該功能範圍中的原始數據,我是否有辦法獲取包括隱藏數據在內的所有數據? – Jaskey

+0

爲什麼你可以擁有原始數據?只需將該數據存儲在本地(範圍)變量中即可。很難說爲什麼你需要在該複選框上點擊兩次。是的,我建議存儲所有數據,包括隱藏的數據。 –

+0

1.我的意思是,我不能在本地函數中獲得原始數據,數據在其他位置以及圖表渲染中被獲取。所以如果可能的話,我希望能得到基於highcharts對象的數據。 2.用戶可以選中該框來查看結果並返回(取消選中)。 – Jaskey

相關問題