使用Handlebars

时间:2016-09-20 10:34:24

标签: javascript jquery ajax highcharts

我有一个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函数中使用的所有这些表达式的值。

由于代码是动态的,我也无法手动更新系列值,因为图表上的行数取决于来自后端的数据。

感谢您的任何意见。

1 个答案:

答案 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(...);

我希望这对你有所帮助。