2014-02-09 31 views
0

我寫的敲除爲highcharts結合,因此,我通過添加和/或移除系列具有highcharts series對象我要綁定到圖表的可觀察到的陣列必要時使用highcharts api比較圖表系列陣列新陣列,以確定增加/刪除

這裏是我的bindingHandler的輪廓(對於非淘汰賽,這是將我的ViewModel綁定到綁定到它的UI元素的位)。

ko.bindingHandlers.series = { 
    update: function(element, valueAccessor, allBindings, viewModel, bindingContext) { 
     if(element.highChart === undefined){ 
      console.warn('Element ' + element.id + ' not attached to a highchart binding'); 
      return; 
     } 
     var value = valueAccessor(); 
     var valueUnwrapped = ko.unwrap(value); 
     var chart = element.highChart; 
     var series = chart.series; 
     if($.isArray(valueUnwrapped)){ 
      // In here is my question 
     } 
    } 
} 

哪裏的評論是形式上的形式是我qustion的癥結。在這一點上我有兩個JavaScript變量

  • series - 的highcharts系列對象數組目前顯示
  • valueUnwrapped - highcharts一系列對象的數組,它現在應該顯示

什麼是比較這兩個陣列以確定的有效方式

在箱子它的幫助下被添加上的情況下,還有一個有用尋找get method其通過編號獲得一系列,我很高興在我的所有系列中都有一個編號。這是在chart對象,你會在我上面的示例代碼中看到。

我當然可以得到真正懶惰和清除圖表

while(series.length > 0) 
    series[0].remove(false); 

然後從我的數組再次添加它們。我想知道是否有更好的方法。

+0

並不淘汰賽觀察變化對你來說,所以你不必手動調和? – dandavis

+0

那是什麼我嘗試添加;)淘汰賽將綁定文本到文本框,和項目下拉本身,但是當你要像highcharts整合,你寫一個[bindingHandler(HTTP:// knockoutjs。com/documentation/custom-bindings.html) – Jamiec

+0

是由數字,數組或對象組成的系列數據數組? – dandavis

回答

1

我認爲,'懶惰'的方式並不是那麼懶惰。即使你設置了每個系列的'id',那麼來自Highcharts的get()函數將循環遍歷所有系列以找到一個。如果你有10個系列,你會做for循環的10倍。事實上,它也會檢查座標軸和座標點,因此速度並不像你期望的那麼快。

我會堅持

while(series.length > 0) 
    series[0].remove(false); 

$(valueUnwrapped).each(function(el, in){ 
    chart.addSeries(el, false); 
}); 

chart.redraw(); 

由於這一切:只有兩個「爲」漂亮業績環。在檢查和比較系列是否需要刪除或更新,或只是新的數據集不值得(在我看來)。

我想你可以嘗試創建淘汰賽新問題(不highcharts標籤)是這樣的:操作系統類似的東西「基於ID的如何比較兩個數組對象的」;)

+0

感謝您的回答,這幾乎是我一起去的。 – Jamiec