Coffeescript / Jquery绑定事件最佳实践

Lad*_*igo 5 javascript jquery coffeescript

我是coffescript的新手,但我对将事件从jquery绑定到coffeescript类实例的最佳方法是什么感兴趣?我试图防止我的班级中有太多嵌套的回调:

class Page
  id2clicks : 0
  id3clicks : 0
  id4clicks : 0

  onLoad: ->

    $('#id2').on 'click', @ , @onId2Click

    $('#id3').on 'click', $.proxy(@onId3Click,@)

    $('#id4').on 'click' , () =>
      @id4clicks++
      alert @id4clicks

  onId2Click: (e) ->
    e.data.id2clicks++
    alert e.data.id2clicks

  onId3Click: ->
    @id3clicks++
    alert @id3clicks

p = new Page()
p.onLoad()
Run Code Online (Sandbox Code Playgroud)

所有3种方法都有效...有没有更好的方法/建议来做到这一点?

小智 3

就我个人而言,我更喜欢这种方式,因为它是最短的并且显示内联处理程序(请注意,我还省略了括号):

$('#id4').on 'click' , =>
  @id4clicks++
  alert @id4clicks
Run Code Online (Sandbox Code Playgroud)

这对于矮个子处理者来说非常好。然而,偶尔你有一个想要拆分出来并在其他地方重用的函数,在这种情况下我更喜欢使用类似的东西

$('#id2').on 'click', $.proxy(@onId2Click, @)
Run Code Online (Sandbox Code Playgroud)

甚至

$('#id2').on 'click', (e) =>
  @onId2Click e
Run Code Online (Sandbox Code Playgroud)

另一种方法是写

onId3Click: =>
  @id3clicks++
  alert @id3clicks
Run Code Online (Sandbox Code Playgroud)

并使用

$('#id3').on 'click', @onId3Click
Run Code Online (Sandbox Code Playgroud)

但我个人不鼓励这样做,因为大多数人不希望@onId3Click成为一个绑定函数,它迫使他们跳转到定义要检查的代码部分。