咖啡脚本构造函数中的绑定事件

Bind event in coffee script constructor

本文关键字:绑定 事件 脚本 构造函数 咖啡      更新时间:2023-09-26

如果我有类

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

当我更改控件时,会触发更改事件,并且出现错误$canvas is undefined

但是,如果代码更改为

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

一切都按预期工作。

为什么?

这按预期工作。对构造函数参数使用 @ 会自动在我们的构造函数中设置this.canvas = canvas。事件处理程序的上下文(this)与类不同,除非您使用"胖箭头"=>显式限定其范围。

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

在您的工作示例中,您通过不将canvas附加到当前上下文来避免该问题。