De acuerdo, no sé cómo expresar el título para esta pregunta.Cierre ¿Alcance no capturado? - Coffeescript
openDir = (path) ->
socket.emit "get_metadata", path, (data) ->
columnBox = $ "<div/>", class: "columnbox"
for item in data.contents
itemBox = $ "<div/>", class: "itembox"
itemBox.click ->
columnBox_inner.children().removeClass "selected"
itemBox.addClass "selected" # <<<--- Over here
openDir item.path
columnBox.append itemBox
columnBox.appendTo "#columnscontainer"
entiendo que la variable itemBox
se define en el ámbito openDir
's aquí. Pero dado que la línea señalada está en una función lambda, ¿no debería itemBox
capturar el objeto al que hace referencia el itemBox
del ámbito principal en lugar de mutar al último objeto al que hace referencia?
Para ponerlo en claro, espero que el manejador de clics de cada itemBox
realice consigo mismo. Pero lo que sucede es que itemBox
en cada uno de los manejadores de clics siempre se refieren al último elementoBox.
Puedo solucionar esto fácilmente cambiando donde itemBox se declara. es decir, el cambio de
for item in data.contents
en
data.contents.forEach (item) ->
pero me gustaría saber por qué la función lambda no capta las variables valor actual.
La pregunta también se aplica a la variable 'item' referenciada en la línea' openDir item.path' como incluso eso se define en el ámbito 'openDir'. –