У меня есть такой код и не знаю, почему в анонимной функции передается nv.addGraph() Я не могу получить доступ к переменным из внешней функции как , zcls или this.model.JavaScript закрытия не может получить доступ к внешним переменным
function (out) {
// Here you call the "this" means the widget instance. (@see Mylable.js)
var zcls = this.getZclass(),
uuid = this.uuid;
// The this.domAttrs_() means it will prepare some dom attributes,
// like the pseudo code below
/*
* class="${zcls} ${this.getSclass()}" id="${uuid}"
*/
var a = this.domAttrs_();
out.push('<span ', this.domAttrs_(), '>fds</span><div id="chart"><svg></svg></div>');
nv.addGraph(function() {
var chart = nv.models.multiBarChart()
.transitionDuration(350)
.reduceXTicks(true) // If 'false', every single x-axis tick label
// will be rendered.
.rotateLabels(0) // Angle to rotate x-axis labels.
.showControls(true) // Allow user to switch between 'Grouped' and
// 'Stacked' mode.
.groupSpacing(0.1) // Distance between each group of bars.
;
chart.xAxis.tickFormat(d3.format(',f'));
chart.yAxis.tickFormat(d3.format(',.1f'));
var data = [{
key: 'Some key',
color: '#ff44ee',
values: [{
x: 1,
y: 3
}, {
x: 3,
y: 4
}]
}]
d3.select('#chart svg').datum(data).call(chart);
// d3.select('#chart svg').datum(this.model.data).call(chart);
var someData = this.model.data;
nv.utils.windowResize(chart.update);
return chart;
});
Эта функция в некотором роде используется в ZKoss Widget так что в этой функции можно обращаться к его свойствам, как this.model, но это не возможно, во внутренней анонимной функции. Я понятия не имею, что в этом плохого, я только начал кодирование в JS.
Я не вижу, где вы * попробуете * использовать 'a' или' zcls' в анонимной функции или где 'this.model' определяется в первую очередь. – Quentin
Когда я писал, я не могу получить доступ к zcls. Я имел в виду, что я не вижу их в хром-отладчике. this.model определяется каркасом ZKoss, в отладчике я вижу его во внешней функции, но не во внутренней функции. – Alinoe
Вы не можете видеть их в отладчике Chrome, потому что вы не обращались к ним, а не потому, что не можете. Если вы добавите к ним доступ в закрытии, они появятся в отладчике. Chrome оптимизирует закрытие (исключая переменные, которые не используются из закрытия), поэтому отладчик их не показывает. – chuckj