有没有更好的方法在使用=>的函数中调用$(this)在Coffeescript?

时间:2012-07-10 15:10:26

标签: jquery coffeescript

我注意到如果我尝试像这样编译Coffeescript行:

$note.find('a.close').bind 'click', (event) =>
  $(this).parent().remove()

$(this)编译为$(_this),考虑到我正在使用=>,这是有道理的。问题是,我不想在以后需要在此范围内使用局部变量时使用->

我必须用反引号转义第二行才能使$this正确编译,àla:

`$(this).parent().remove()`

...还是有更好的方法?

更新(2012年7月12日):

我最终这样做了:

close = -> $note.remove()
$note.find('a.close').bind 'click', (event) ->
  close()
setTimeout close, duration

我知道它完全避免使用this,但这似乎比使用普通JS中开发的相同self = this技巧更清晰的解决方案。

3 个答案:

答案 0 :(得分:2)

要获取您点击的元素,您可以执行以下操作:

close_button = $(event.currentTarget) // equivalent to $(this) here
close_button.parent().remove()

-----或-----

that = @
$note.find('a.close').bind 'click', (event) ->
    $(this).parent().remove()
    that.anotherFunc()

但它并没有真正回答你的问题,但它是一个很好的选择。 我会在可能的情况下自己使用第一个解决方案。

答案 1 :(得分:1)

您真的想使用->事物会发生变化,是该函数中this(或@)的值。如果您希望能够同时使用当前的this和所需的this,则需要将当前this保留在不同的名称下

现在的代码:

$note.find('a.close').bind 'click', (event) ->
  $(this).parent().remove()

如果您需要来自外部范围的this,请输入代码:

that = this
$note.find('a.close').bind 'click', (event) ->
  that.doSomething()
  $(this).parent().remove()

答案 2 :(得分:0)

据我了解,您只需要缓存变量

that = @

context.action (e) ->
  foo(that)