Coffeescript + Atom: обязательные слушатели
Моя проблема заключается в том, что если я создаю прослушиватели в цикле, то функции обратного вызова слушателя используют последнее значение индекса цикла при вызове. Я думаю, что это проблема привязки функции обратного вызова, но я не могу понять, как. Смотрите следующий пример:
{TextEditor, Disposable, Range, Point, Atom} = require 'atom'
class TestGuy
constructor:(n,id) ->
@marker = atom.workspace.getActiveTextEditor().markBufferRange([[n,0],[n+1,0]])
@id = id
class TestGuys
constructor:() ->
@markID = 0
@disposables = []
bundle:() ->
for i in [0...2]
testguy = new TestGuy([i,@markID)
console.log(testguy.id) #prints 0,1 as i expect
@markID += 1
@disposables.push testguy.marker.onDidChange (event) =>
console.log(testguy.id) #when i invalidate markers, these callbacks print 1,1, but i expected 0,1 !
atom.commands.add 'atom-text-editor', 'custom:test', ->
testobject = new TestGuys()
testobject.bundle()
Поэтому, когда вызываются обратные вызовы, они оба используют i = 1, хотя первая функция обратного вызова была определена для i=0.