这可能更像是一个范围问题,而不是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/
答案 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