Coffeescript对象,jquery回调和变量范围冲突和混淆

时间:2013-04-17 15:06:00

标签: javascript jquery coffeescript

尝试找出最佳方法来完成这项工作:

class Person

  constructor: (@el) ->
    @el = $(el)
    this.bind()

  bind: ->
    @el.find('.something').on 'click', ->
      $(this).hide()       # conflict!
      this.do_something()  # conflict!

  do_something: ->
    alert 'done!'

我知道我可以使用哈希火箭(=>),然后从我的回调中访问this.do_something,但之后与callback 'this'冲突,所以jquery试图选择对象,而不是element '.something'。如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

您无法让this引用不同的对象。通过将实例的this引用存储在辅助变量中,使用不同的标识符:

  bind: ->
    person = this
    @el.find('.something').on 'click', ->
      $(this).hide()
      person.do_something()