2016-02-12 3 views
-1

Я заметил странное поведениеBind событие в конструкторе кофе сценария

Если у меня есть класс

class Control 
    constructor: (@canvas, @control) -> 
    @control.on('keyup change', -> 
     update(@canvas) 
    ) 

При изменении управления, события изменения обжигают, и я получил ошибку $ холст неопределен.

Однако, если код будет изменен на

class Control 
    constructor: (canvas, @control) -> 
    @control.on('keyup change', -> 
     update(canvas) 
    ) 

все работает, как ожидалось.

Почему?

ответ

1

Это работает как ожидалось. Используя @ в параметре конструктора, в нашем конструкторе автоматически устанавливается this.canvas = canvas. Контекст() вашего обработчика событий отличается от класса, если вы явно не раскрываете его с помощью «стрелки жира» =>.

class Control 
    constructor: (@canvas, @control) -> 
    @control.on('keyup change', => # notice fat arrow 
     update(@canvas) 
    ) 

В вашем рабочем примере, вы избежать проблемы, не придавая canvas к текущему контексту.

Смежные вопросы