Как захватить переменные для асинхронных функций в цикле coffeescript? - PullRequest
3 голосов
/ 23 сентября 2011

Я зацикливаюсь на объекте и пытаюсь добавить событие onclick для каждой кнопки, которая соответствует каждому элементу в объекте.

for id of obj
    button = $("#my_button"+ id)
    button.click(->  console.log id) 

С этим циклом каждыйКнопка регистрирует последний идентификатор цикла.Как заставить каждую кнопку регистрировать правильный соответствующий идентификатор?

1 Ответ

9 голосов
/ 23 сентября 2011

Это классическая проблема JavaScript.Стандартное решение заключается в том, чтобы обернуть каждую итерацию цикла в анонимную функцию и передать id в эту функцию;таким образом, функция, которую вы передаете click, увидит этот конкретный экземпляр * 1003. *

CoffeeScript предоставляет хороший синтаксис для этой цели: do (id) -> ... компилируется в (function(id){ ... })(id).Итак, для вашего примера вы бы написали

for id of obj
  do (id) ->
    button = $("#my_button"+ id)
    button.click(->  console.log id)

Я говорю о do в моей статье Вмешательство CoffeeScript .

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