У меня есть следующая функция, которая создает одну или несколько осей Y для диаграммы Highcharts, хотя моя проблема не имеет ничего общего с API Highcharts.
_constructYAxes: function(yAxes) {
if (yAxes) {
var highChartYAxes = [];
for (var i = 0; i < yAxes.length; i++) {
var kpiUnits = yAxes[i].units;
var axisUnits = 'units ' + i;
var axisLabel = 'label ' + i;
// construct an Highcharts y-axis object
var yAxis = {
labels: {
formatter: function() {
return this.value + ' ' + axisUnits;
}
},
title: {
text: axisLabel
},
};
highChartYAxes.push(yAxis);
}
// pass all the y-axes to the chart
this.chartOpts.yAxis = highChartYAxes;
}
}
Проблема в том, что та же самаяlabel
используется для каждой оси y, даже если title
отображается правильно.Разница между этими двумя заключается в том, что первое вычисляется путем вызова функции
labels: {
formatter: function() {
return this.value + ' ' + axisUnits;
}
},
Так что, если у меня есть диаграмма с 3 осями Y, на всех из них появляется метка «единицы 2».
Я думаю, что проблема в том, что функция formatter
закрывается по значению axisUnits
в последней итерации цикла, так что когда функция вызывается (Highcharts), она использует то же значение axisUnits
каждый раз.
Что можно сделать, чтобы заставить функцию использовать i-ое значение axisUnits каждый раз, когда она вызывается вместо этого?
Очевидно, что мое понимание области видимости JavaScript несколько отсутствует (меня часто удивляет то, что this
оценивает в разных контекстах).Если кто-нибудь знает о некоторых хороших интернет-ресурсах, которые могут помочь мне разобраться в этом, отправьте их мне.