我正在尝试更新'pie'类型图表的系列数据选项:
我使用导出按钮显示更改图表类型的选项,除了需要不同格式的系列数据的饼图外,所有其他图表类型都能正常工作。
exporting: {
buttons: {
lineButton: {
text: 'line',
onclick: function () {
for(i=0;i<this.series.length;i++) {
this.series[i].update({
type: "line"
});
}
}
},
barButton: {
text: 'bar',
onclick: function () {
for(i=0;i<this.series.length;i++) {
this.series[i].update({
type: "column"
});
}
}
},
pieButton: {
text: 'pie',
onclick: function () {
var pieSeries = [];
$.each(category_totals, function(j, k) {
pieSeries.push( { name: j , y: k } );
});
for(i=0;i<this.series.length;i++) {
this.series[i].remove();
}
this.series = [{
name: title,
colorByPoint: true,
data: pieSeries
}];
this.series[0].update({
type: "pie"
});
}
}
}
...
我收到此错误:Uncaught TypeError: this.series[0].update is not a function
答案 0 :(得分:1)
问题是你从图表中依次删除系列,每次调用后重绘图表,并且在for循环结束时图表没有任何系列。当你这样做
wait = new WebDriverWait(driver, new TimeSpan(0, 0, 0, 10));
wait.IgnoreExceptionTypes(typeof(NoSuchElementException));
wait.Until(ExpectedConditions.ElementToBeClickable(By.Id("FieldId")));
您正在修改javascript对象,因此当您尝试执行时this.series = [{
name: title,
colorByPoint: true,
data: pieSeries
}]
方法不可用
update
因为您尝试在通用JavaScript对象上调用Highcharts方法。 你应该做的是
this.series[0].update({
type: "pie"
});
另外,建议:将参数false传递给this.addSeries({
name: title,
colorByPoint: true,
data: pieSeries,
type: 'pie'
})
方法,以便它不会每次都重绘。只需在添加新系列时重绘。
所以上面的调用看起来像
remove
答案 1 :(得分:0)
1
for(i=0;i<this.series.length;i++) {
this.series[i].remove();
}
上述代码不会删除系列项:see here
2。
添加系列的正确方法是:
this.addSeries({...});
3。 最终工作代码:
...
pieButton: {
text: 'pie',
onclick: function () {
var pieSeries = [];
$.each(category_totals, function(j, k) {
pieSeries.push( { name: j , y: k } );
});
while(this.series.length > 0) {
this.series[0].remove(true);
}
this.addSeries({
name: title,
colorByPoint: true,
data: pieSeries,
type: 'pie'
});
// As Rahul Sharma pointed out in comments above,
// you can pass the "type" option to
// addSeries method, making this call redundant
// this.series[0].update({
// type: "pie"
// });
}
}
...