包括tl
我有一个yAxis.labels.formatter
该
/**
* Formats yAxis labels in order to include the min/max dates of the row
*
* /!\ Scared of performance issues
* /!\ because the formatter is called 4 times on init,
twice on resize,
and once on update
* /!\ On top of that, the formatter is called once per category (label)
* /!\ and my (poopy) function loops over all the data, each time
* /!\ as a result, we have
* => 4 x nbOfCategories x nbOfData
* calls of this function :( --> see console logs
*/
如上所述,在初始渲染时,每个类别都将formatter函数调用4次(并且我当前的实现每次都已经遍历了所有数据,我知道这是一个非常糟糕的主意,但是会有所改变:请参阅“ 实际问题“)。在前两个调用期间,this.chart.series[0].data
仍然为空,但是如果我尝试跳过该操作(通过注释line 79
的linked demo),则图表会在没有正确标签格式的情况下实例化(即使我的函数仍然叫了两次)。 (这已经很奇怪了,没有吗?)
我怀疑HighCharts具有某种生命周期,顺序,用于绘制/更新导致此问题的图表,但不知道是哪个。
我的[[实际问题将是“我应该如何处理(格式化轴标签)/是否有一种更便宜的方法来手动'强制'标签更新?”
我并不是完全在寻找优化的功能(但是仍然很受欢迎),因为我已经计划在HighCharts之外计算这些标签并将它们作为userOptions
传递,以便将成本从4 x nbOfCategories x nbOfData
降低到4 x nbOfCategories
,但是,理想情况下,我想要一种减少到nbOfCategories
的方法(例如更新系列数据时只有一个调用)。
yAxisCatergoryMinMaxValueFormatter函数的结果作为ID附加到数据点并在formatter中显示可能是一个更好的解决方案。
for (let i of data1){
i.id = "" + i.name + "<br><b>" + toDdMmDateFormat(new Date(i.start)) + " — " + toDdMmDateFormat(new Date(i.end)) + "</b>"
}
和
formatter(){ let data = this.chart.series[0].userOptions.data; return data[this.pos].id }
演示:https://jsfiddle.net/BlackLabel/4h3wqm2u/