Highcharts - 同步图表中工具提示格式的问题

时间:2017-05-16 16:41:47

标签: javascript highcharts

我正在使用Highcharts使用同步图表,但我在使用工具提示选项中的格式化程序功能时遇到问题。每个图表都有不同的格式要求(%vs整数与浮点数等),但它似乎只是为每个图表工具提示采用最后的图表格式。

这是出乎意料的,因为我没有图表标题和y轴格式的问题,它正确地选择了。这是我目前的代码(缩写为非常冗长):

for (var j = 0; j < json.data.length; j++) {

  $('#highchart_metric' + i + '_').highcharts({
    chart: {
      type: 'area',
    },
    title: {
      text: json.fmt[i].displayName,
    },
    xAxis: { // left out for brevity},
    yAxis: {
      labels: {
        formatter: function () {
          var label = this.axis.defaultLabelFormatter.call(this);
          return numeral(label).format(json.fmt[i].format);
        }
      }
    },
    tooltip: {
      formatter: function () {
        return moment(this.x).format("MMM Do[,] YYYY") + ': <b>' + numeral(this.y).format(json.fmt[i].format) + '</b>';
      }
    }
    series: [{ // left out for brevity }]
  });    
}

json的结构类似于:

var json = {
  data: [[/* data */][/* data */]];
  fmt: [
  {
    col: "tfr",
    displayName: "TFR",
    fmt: "0,0.00"
  },
  {
    col: "volume",
    displayName: "Ticket Volume",
    fmt: "0,0"
  }
 ]
};

1 个答案:

答案 0 :(得分:1)

看起来这是错误使用回调和for循环的问题。每个格式化程序回调都会创建一个闭包,它可以访问相同的变量i - 当循环结束时,它等于json.data.length。

使用forEach类型的循环,它将为每个图表创建一个单独的i变量。

forEach http://jsfiddle.net/9eezsx7v/for loop http://jsfiddle.net/9eezsx7v/1/

进行比较