我有一个Highchart图表,它以Handlebars表达式的形式从后端接收数据。像这样的东西。
$('#container').highcharts({
xAxis: {
categories: [{{{histKeys}}}]
},
yAxis: {
title: {
text: 'Failure Percentage',
style: {
color: '#cc0000'
}
},
labels: {
format: '{value}%',
style: {
color: '#cc0000'
}
},
plotLines: [{
value: 0,
width: 1,
color: '#808080'
}]
},
credits: {
enabled: false
},
plotOptions: {
series: {
cursor: 'pointer',
point: {
events: {
click: function() {
var index = this.series.name;
var tfs = epochKeys[Math.ceil(this.x)];
window.location.href = url;
return false;
}
}
}
}
},
legend: {
layout: 'vertical',
align: 'right',
verticalAlign: 'middle',
borderWidth: 0
},
series: [
{{#each histData as |index|}}
{
name: '{{@key}}',
type: 'spline',
allowPointSelect: true,
{{#each index as |status|}}
{{#if_eq @key "histSuccess"}}
{{/if_eq}}
{{#if_eq @key "histFailure"}}
data: [{{this}}],
{{/if_eq}}
{{/each}}
},
{{/each}}
]
});
现在我进行AJAX调用以获取数据以刷新图形。如何将Handlebars表达式的新值传递给Highcharts代码中使用的变量。 因此,我在AJAX调用中收到的数据包含已在Highcharts函数中使用的所有这些表达式的值。
由于代码是动态的,我也无法手动更新系列值,因为图表上的行数取决于来自后端的数据。
感谢您的任何意见。
答案 0 :(得分:2)
您可以在ajax回调中获取(已存在的)highcharts对象,如下所示:
$('#container').highcharts()
事实上,这是一个非常好的API与此对象进行交互,在此处记录:http://api.highcharts.com/highcharts
对于初学者,您可以通过再次调用addSeries()来替换现有图表。要使其正常工作,您的系列必须具有ID,并且您再次添加具有相同ID的系列:
$('#container').highcharts().addSeries({ id: 'myid', data: .... });
同样,您也可以删除现有系列:
$('#container').highcharts().removeSeries('myid');
它也有可能只取代一系列的数据,就像这样:
$('#container').highcharts().getSeries('myid').setData(...);
我希望这对你有所帮助。