Highcharts呈现周期(多次调用标签格式化程序)

问题描述 投票:0回答:1

包括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 79linked demo),则图表会在没有正确标签格式的情况下实例化(即使我的函数仍然叫了两次)。 (这已经很奇怪了,没有吗?)

我怀疑HighCharts具有某种生命周期,顺序,用于绘制/更新导致此问题的图表,但不知道是哪个。

实际问题

我的[[实际问题将是“我应该如何处理(格式化轴标签)/是否有一种更便宜的方法来手动'强制'标签更新?”

我并不是完全在寻找优化的功能(但是仍然很受欢迎),因为我已经计划在HighCharts之外计算这些标签并将它们作为userOptions传递,以便将成本从4 x nbOfCategories x nbOfData降低到4 x nbOfCategories,但是,理想情况下,我想要一种

减少到nbOfCategories的方法(例如更新系列数据时只有一个调用)。

tl; dr:

使用HighCharts的“生命周期”,在初始渲染时,有没有办法减少标签格式化程序调用的数量(目前为4)?

javascript highcharts
1个回答
0
投票
我认为将

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/
© www.soinside.com 2019 - 2024. All rights reserved.