2011-09-23 103 views
3

我正在循環一個對象,並試圖爲對應於對象中每個項目的每個按鈕添加一個onclick事件。如何在coffeescript循環中捕獲異步函數的變量?

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

有了這個循環,按鈕登錄循環的最後 ID。我如何獲得每個按鈕以記錄適當的相應ID?

回答

9

這是一個典型的JavaScript問題。標準解決方案是將每個循環迭代包裝在一個匿名函數中,並將id傳遞給該函數;這樣,你傳遞給click的函數將會看到那個特定的id實例。

CoffeeScript爲此提供了一種很好的語法:do (id) -> ...編譯爲(function(id){ ... })(id)。所以,你的榜樣,你會寫

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

我在我的文章A CoffeeScript Intervention談論do

+0

天哪,我從來不知道,我做錯了一切! – user1323136