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.

0 ответов

Другие вопросы по тегам