如何将系列传递给highcharts中的绘图选项

时间:2016-08-05 15:09:33

标签: javascript charts highcharts

我正在尝试更新'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

2 个答案:

答案 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"
        //    });
    }
}
...