保存系列图表类型供以后使用

时间:2014-07-31 21:29:19

标签: javascript charts highcharts

这可能更像是一个范围问题,而不是HighCharts问题。

我有一个更改图表类型的功能,请参阅下文:

function ChangeChartType(chart, newType) {
    newType = newType.toLowerCase();
    var numberofseries = chart.series.length;
    var i = 0;
    if (newType == 'reset') {
        for (i; i < numberofseries; i++) {
            if (typeof chart.series[i].defaulttype == 'string') {
                chart.series[i].update({
                    type: chart.series[i].defaulttype
                });
            }
        }
    } else {
        for (i; i < numberofseries; i++) {
            if (typeof chart.series[i].defaulttype != 'string') {
                chart.series[i].defaulttype = chart.series[i].type; //The new property does not survive
            }
            chart.series[i].update({
                type: newType
            });
        }
    }
}

我正在尝试在名为“defaulttype”的系列对象上创建一个新属性,以便保存创建图表时设置的图表类型。单击“重置”按钮时,我想将图表类型更改回属性中存储的内容。

问题是新属性在函数外消失了。我错过了什么?任何帮助将不胜感激。

我创造了一个小提琴来演示整个问题。 http://jsfiddle.net/xeRRS/9/

2 个答案:

答案 0 :(得分:0)

根据您的代码,实现目标的一种简单方法是存储&#34; defaultType&#34; (骆驼外壳有助于在沙漠中看到)属性对图表变量,因为看起来系列数组被覆盖在库内某处。以下是代码http://jsfiddle.net/4ecHP/

的工作版本

另一方面,将一个属性添加到一个对象中,该对象不清楚该对象内部发生的事情有点危险(图表对象可能已经有一个defaultType属性),而是可以将defaultType存储为全局变量或在窗口对象中创建_settings对象并将所有图表设置存储在那里

_settings={
        height: 500,
        spacingLeft: -35,
        spacingRight: 12,
        type: 'line',
        zoomType: 'xy',
        defaultType: null
}

在这种情况下,在重置时你可以调用chart.series [i] .update({type:_settings.defaultType});

答案 1 :(得分:0)

您还可以在图表对象中设置默认类型,然后在自定义函数中引用Highcharts.charts [0]对象(保留图表),从userOptions中提取默认系列。

Highcharts.charts[0].userOptions.chart.defaultType

示例:http://jsfiddle.net/xeRRS/8/