我正在为highcharts编写一个敲除绑定,因此我有一个可观察的高图series
对象数组,我希望通过使用{{3}添加和/或删除系列来绑定到图表}。
以下是我的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
}
}
}
评论在上面形成了我的问题的关键。此时我有两个javascript变量
series
- 当前显示的一系列highcharts系列对象 valueUnwrapped
- 一系列highcharts系列对象,现在应该显示比较这两个数组以确定
的有效方法是什么series
数组中的哪些实例
valueUnwrapped
数组中应使用remove
method 如果有帮助,有一个有用的外观addSeries
method,它会按ID获得一个系列,我很高兴在我的所有系列中都有一个id。这是在chart
对象上,您将在上面的示例代码中看到它。
我当然可以非常懒惰并清除图表
while(series.length > 0)
series[0].remove(false);
然后从我的数组中再次添加它们。我想知道是否有更好的方法。
答案 0 :(得分:1)
我认为,'懒惰'的方式并不是那么懒惰。即使你为每个系列的'id'设置,然后来自Highcharts的get()
函数将循环遍历所有系列以找到一个。如果你有10个系列,那么你将进行10次循环。事实上,它还检查轴和点,因此它没有你想象的那么快。
我会坚持
while(series.length > 0)
series[0].remove(false);
$(valueUnwrapped).each(function(el, in){
chart.addSeries(el, false);
});
chart.redraw();
因为这就是全部:只有两个'for'循环具有良好的性能。在检查和比较是否需要删除或更新系列时,或者只是新数据集不值得(在我看来)。
我认为你可以尝试为knockout(没有highcharts标签)创建一个新的问题,例如:'如何基于ID'的os比较两个对象数组;)