如何使用CoffeeScript的“do”属性“this”?

时间:2013-10-11 19:07:30

标签: coffeescript

CoffeeScript有一个方便的do语句来保存闭包中的变量。但是,如何使用this保留do的属性?这似乎总是失败。

示例:在类方法中,我想使用jQuery将事件处理程序附加到HTML元素。处理程序应该使用参数调用同一个类的另一个方法。现在,如果我写:

foo = getBar()
$('div').click -> @handler foo

这显然不起作用,因为该函数将在没有名为handler的方法的不同上下文中执行。但是,如果我使用do并且我写了这个:

foo = getBar()
do (@handler, foo) ->
  $('div').click -> @handler foo

也会失败,因为@handler会转换为不会通过闭包的this.handler。什么是解决这个问题的优雅方法?

1 个答案:

答案 0 :(得分:1)

尝试使用fat arrow(等号)

foo = getBar()
$('div').click => @handler foo

或者,在回调之前获取对处理程序的引用。

cbHandler = @handler
foo = getBar()
$('div').click -> cbHandler foo