Сбросьте yAxis Min и Max при развертывании - PullRequest
0 голосов
/ 17 мая 2018

Я видел похожие вопросы, подобные этим (даже с похожим названием), но ни один из них не дал мне нужного ответа.

У меня есть гистограмма с отрицательным стеком диаграмма с детализацией,Чтобы центрировать ось Y, я вычисляю максимальное значение среди рядов и устанавливаю его как крайние значения диаграммы.

Дело в том, что я не нашел подходящего места для размещения этой логики,Я попытался поместить его в события redraw или render, но, поскольку я изменяю yAxis, это вызывает переполнение стека.То, что я до сих пор работаю более или менее, - это установление события drilldown с параметром setTimeout для задержки расчета, в противном случае он получит значения до детализации.Мне нужно какое-то событие, подобное drilldownFinish.

Вот рабочая скрипка с этой логикой детализации (но не для стека отрицательных баров): http://jsfiddle.net/6qpq78do/

Есть идеи, как это сделать без setTimeout?

Спасибо

1 Ответ

0 голосов
/ 18 мая 2018

Сообщение о превышении максимального стека вызовов вызвано функцией setExtremes. Третий аргумент - redraw - по умолчанию true: https://api.highcharts.com/class-reference/Highcharts.Axis#setExtremes

Итак, setExtremes снова вызовет событие redraw, а событие redraw вызовет setExtremes и т. Д. *

Решение здесь заключается в создании флага (redrawEnbaled), который будет контролировать доступ к логике, помещенной в redrawEvent, и предотвращать этот бесконечный рекурсивный цикл:

var redrawEnabled = true;
(...)
events: {
  redraw: function() {

    if (redrawEnabled) {
      redrawEnabled = false;
      let values = [];

      this.series.forEach(s => {
        s.yData.forEach(v => values.push(Math.abs(v)));
      });
      let max = values.reduce((acc, val) => (acc > val) ? acc : val, 0);

      this.yAxis[0].setExtremes(-max, max);

      redrawEnabled = true;
    }

  }
}

Демонстрационная версия: http://jsfiddle.net/BlackLabel/zjuy21k5/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...