使用HighCharts股票图表动态添加系列

Nea*_*eal 5 javascript highcharts highstock

我有以下代码:http://jsfiddle.net/maniator/vTjW8/

var createChartTemplate = function() {
    return {
        chart: new Highcharts.StockChart({

            chart: {
                renderTo: 'container'
            },
            series: []
        }),
        addSeries: function(name) {
            this.chart.addSeries({
                name: name,
                data: [],
                id: Math.floor(Math.random()*1000)
            });
        },
        addPoint: function(data, series) {
            var seriesIndex = this.seriesExists(series);
            if (!(seriesIndex === false)) {
                this.chart.series[seriesIndex].addPoint(data, false);
            }
            this.chart.redraw();
        },
        seriesExists: function(series) {
            var seriesIndex = false;
            $.each(this.chart.series, function(index, item) {
                if ($.trim(item.name) == $.trim(series)) {
                    seriesIndex = index;
                    return false;
                }
            });
            return seriesIndex;
        }
    }
}
$(function() {
    var data = usdeur.splice(0, 700);
    var chart = createChartTemplate();
    chart.addSeries("New Series");
    for (var i = 0; i < data.length; i++) {
        chart.addPoint(data[i], "New Series");
    }

});
Run Code Online (Sandbox Code Playgroud)

它在控制台中有以下错误:

未捕获的TypeError:无法读取未定义的属性"选项"

如果这是一个普通的高图,这段代码可以正常工作,但由于某种原因,它不适用于HighStock图表.

我怎样才能使它适用于我需要的图表类型?


更新:

我想出了一种动态获取第一个系列的方法,但是当我尝试添加第二个系列时,它有一个错误:

未捕获的TypeError:无法读取未定义的属性"堆栈"

小提琴:http://jsfiddle.net/maniator/V5WAJ/

bej*_*bee 7

您正在使用空系列创建图表,因此出错.当你的这行代码运行时,它series会在设置选项之前立即初始化Highchart .

var chart = createChartTemplate();
Run Code Online (Sandbox Code Playgroud)

当我首先构建系列数组时,我对Highcharts有了更好的体验,然后在最后一步中将它添加到构造函数的选项中.

具体到您的示例,该usdeur.js文件已包含初始化的数据数组.您只需要在选项数组中传递它.你的jsfiddle可以简化为这个.

$(function() {
    var chart = new Highcharts.StockChart({
        chart: {
            renderTo: 'container'
        },
        series: [{
            name: 'New Series',
            data: usdeur
        }]
    });
});
Run Code Online (Sandbox Code Playgroud)