Переместите функцию обратного вызова highcharts yAxis.tickPositioner наружу в какую-нибудь полезную функцию - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь реализовать верхние графики с несколькими осями Y, и мне нужно установить функцию обратного вызова yAxis.tickPositioner для каждой оси Y. Поэтому вместо написания дублирующего кода в каждом обратном вызове мне нужно создать функцию util, в которую я могу передавать значения, такие как dataMin и dataMax, которые доступны только в функции обратного вызова tickPositioner.

chartOptions {
    xAxis: {
        tickPositions: [0, 1, 2, 4, 8]
    },

    yAxis: {
        tickPositioner: function () {
            var positions = [],
                tick = Math.floor(this.dataMin),
                increment = Math.ceil((this.dataMax - this.dataMin) / 6);

            if (this.dataMax !== null && this.dataMin !== null) {
                for (tick; tick - increment <= this.dataMax; tick += increment) {
                    positions.push(tick);
                }
            }
            return positions;
        }
    },
}

Вместо этого я хочу что-то как этот, который имеет все значения как this.dataMin и this.dataMax, доступные в функции util

    chartOptions {
        xAxis: {
            tickPositions: [0, 1, 2, 4, 8]
        },

        yAxis: {
            tickPositioner: this.utilFunction();
        },
    }

utilFunction() {
            var positions = [],
                tick = Math.floor(this.dataMin),
                increment = Math.ceil((this.dataMax - this.dataMin) / 6);

            if (this.dataMax !== null && this.dataMin !== null) {
                for (tick; tick - increment <= this.dataMax; tick += increment) {
                    positions.push(tick);
                }
            }
            return positions;
        }

1 Ответ

1 голос
/ 19 апреля 2020

У вас есть доступ к оси по this в utilFunction, если вы назначите ее следующим образом:

yAxis: {
  tickPositioner: this.utilFunction
}

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


Если вам нужно использовать какой-то другой контекст в функции, вы можете передать требуемые значения через аргументы:

yAxis: {
  tickPositioner: function() {
    utilFunction(this.dataMin, this.dataMax);
  }
}

Демонстрация в реальном времени: http://jsfiddle.net/BlackLabel/6m4e8x0y/4959/

...