Вызов onclick с локальной переменной - PullRequest
1 голос
/ 19 января 2012

Во-первых, извиняюсь за то, что спрашиваю что-то, на что нужно где-то ответить (я искал!)

Я хочу сделать это:

var i;
for (i = 0; i < 5; i++) {
  ...
  // Add an anchor to the dom
  ...
  a.onclick = goog.bind(this.doSomething, this);
  ...
}

namespace.Clazz.prototype.doSomething = function(event, index) {
  console.log('index: ' + index);
}

Я хочу, чтобы 5 якорей при каждом нажатии передавали разные значения от i до doSomething (вместе с событием нажатия) Я также хочу сохранить контекст this в doSomething (отсюда и привязка).

Ответы [ 3 ]

1 голос
/ 19 января 2012

Если вы можете изменить порядок получения аргументов, вы сможете это сделать ...

a.onclick = goog.bind(this.doSomething, this, i);

Так что ваш doSomething должен выглядеть следующим образом ...

namespace.Clazz.prototype.doSomething = function(index, event) {
  console.log('index: ' + index);
};

По крайней мере, так выглядит из библиотеки Google Closure source .

1 голос
/ 19 января 2012
a.onclick = (function(i) { return function() {goog.bind.....}; })(i);

Это создает новое замыкание, в котором значение i является фиксированным.

0 голосов
/ 19 января 2012

Что-то вроде этого может работать лучше для вас:

a.onclick = function() {
    doSomething(this, i)
}
...