【发布时间】:2014-02-09 22:01:16
【问题描述】:
我正在为 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
}
}
}
上面的评论是我的问题的症结所在。此时我有两个 javascript 变量
-
series- 当前显示的 highcharts 系列对象数组 -
valueUnwrapped- 现在应该显示的一组 highcharts 系列对象
比较这两个数组以确定的有效方法是什么
- 应该使用
removemethod 删除series数组上的哪些实例 -
valueUnwrapped数组上的哪些实例应该使用addSeriesmethod 添加
如果有帮助,有一个有用的 get method 可以通过 id 获取系列,我很高兴在我的所有系列中都有一个 id。那是在chart 对象上,您还将在上面的示例代码中看到它。
我当然可以真的很懒并清除图表
while(series.length > 0)
series[0].remove(false);
然后从我的数组中再次添加它们。我想知道是否有更好的方法。
【问题讨论】:
-
doesn't knockout 为你观察变化,所以你不必手动协调?
-
这就是我要添加的内容;) 淘汰赛会将文本绑定到文本框,并将项目绑定到本机下拉列表,但是当您想要集成诸如 highcharts 之类的内容时,您可以编写 bindingHandler
-
你的系列数据数组是由数字、数组还是对象组成的?
-
它是一个highcharts series objects的数组
-
这就是我所害怕的。如果是数字或数组,您可以将系列元素作为字符串进行比较,但对象更难比较。你需要找到确凿的属性来识别整个对象。这可能是名称或值,具体取决于您的数据。这里没有足够的信息来明确回答......
标签: javascript arrays knockout.js highcharts