代码之家  ›  专栏  ›  技术社区  ›  S Kumar

高图中树形图的选择更改

  •  1
  • S Kumar  · 技术社区  · 7 年前

    JSFIDLE链接: click here

    这里需要解决两个问题:

    问题1: 单击selection2和selection 3可以正常工作,但单击Selection1上的后退并不能反映更改。

    问题2: 为了为不同的选择返回不同的dataLabel,我编写了代码,它似乎工作得很好,但在调试时,我发现每次进行选择时,都会执行两次以下代码。

    formatter: function () {
      if(value=="selection3"){
        return '<b>'+this.point.name + '<br/>'+ this.point.value + '%</b> ' 
      }else{
        return '<b>'+this.point.name + '<br/>'+ this.point.value + '</b> '
      }
    },
    

    我的问题是这个格式化程序函数是如何工作的,以及为什么每次选择都会执行两次if条件。

    感谢您的帮助。

    1 回复  |  直到 7 年前
        1
  •  4
  •   RQman    7 年前

    根据第1版:

    正如@ewolden提到的

    问题1是由于在初始化中设置Selection1数据,并通过引用进行更新而导致的

    要修复它,您可以使用 setData(data [, redraw] [, animation] [, updatePoints]) 用于更新数据的方法 updatePoints 设置为 false (适用于所有系列更改)

    $('#selection1').click(function() {
      value = "selection1";
      chart.series[0].setData(selection1Data, true, {}, false);
    });
    

    更新点 (默认值: 真的 )

    当更新的数据与现有数据长度相同时,将更新点而不是替换点。这允许使用动画进行更新,并且性能更好。在这种情况下,原始数组不会通过引用传递。设置为false可防止。

    还使用 setData 优于 update

    .. **[update]** 方法比Highcharts等其他实用方法的性能更昂贵。系列#setData或Highcharts。系列#设置可见。


    根据第2版:

    作用 formatter 将为提供的每个系列调用。在您的示例中 chart 包含两个系列,原因是

    ... 每次进行选择时,将执行以下代码两次。