点击时,我正在尝试画布中的某些内容。我已经从一个函数,在类Board
addEvents : () ->
@.canvas.addEventListener('mousedown',@.mouseDown)
mouseDown : (e) ->
console.log(e,@)
上面的两个函数在类Board
中,当单击画布时,我想从@返回板,但它返回画布。
我尝试将事件监听器/ mousedown函数更改为:
addEvents : () ->
@.canvas.addEventListener('mousedown',(e)->@.mouseDown(e,@))
mouseDown : (e,@) ->
console.log(e,@)
但这会引发unexpected PARAM_END
答案 0 :(得分:2)
正如您似乎已经想到的那样,您需要使用胖箭=>
在函数体内词汇绑定this
(又名@
)。
class Board
constructor: (@canvas) ->
addEvent: ->
@canvas.addEventListener 'mousedown', @mouseDown
mouseDown: (event) =>
# handle the event here
使用mouseDown
方法的胖箭头意味着@
在函数内部而不是在调用中被词义定义...所以它是你的class
的实例>在代码中查看而不是事件的接收者(DOM元素)。
请注意,.
之后您不需要@
- 您可以写@canvas
代替@.canvas
。
答案 1 :(得分:0)
您需要从函数返回@ ...
addEvents : () ->
@.canvas.addEventListener('mousedown',@.mouseDown)
return @
mouseDown : (e) ->
console.log(e,@)
你仍然可以在Coffee ...中明确地做返回。
答案 2 :(得分:0)
感谢那个因为把我推向正确方向而删除了他的答案的人,
@.canvas.addEventListener('mousedown',(e) => @.mouseDown(e))
是我的最终解决方案