我有类似的东西
$ ->
class MyView extends Backbone.View
initialize: ->
stuff
$("body").on "click", ".stuff", ->
@functionB()
functionA: (new_date) ->
stuff
functionB: () =>
stuff
new MyView(el: $mySelector)
我想从事件处理程序调用函数 我知道我可以使用胖箭,但是如何使用_.bindAll
答案 0 :(得分:0)
首先,我猜测$("body").on "click", ".stuff", ->
实际上在initialize
方法中,你只是有格式问题。否则你的代码没有多大意义。
您将遇到的问题是jQuery控制回调函数中@
(AKA this
)的内容。因此,仅仅绑定functionB
是不够的,因为如果没有正确的functionB
,您将无法访问@
。
在您的特定情况下,这一点都不重要,因为functionB
被定义为绑定函数(使用=>
)并且您不需要在事件处理程序中使用匿名包装器,只需要{ {1}}函数本身:
on
如果由于某种原因你坚持绑定匿名函数,那么你想要使用_.bind
(或Function.prototype.bind
)而不是_.bindAll
; $("body").on "click", ".stuff", @functionB
将函数(按名称)绑定到特定的_.bindAll
,但您希望找到特定@
的特定函数(没有名称),有关详情,请参阅What is the difference between these Backbone/Underscore .bind() methods?讨论差异。你会说:
@
答案 1 :(得分:0)
由于您使用的是主干,因此您可以使用本机语法进行绑定,=>
或_bind
和_bindAll
的内置下划线方法。他们做同样的事情,这只是你宣布他们的地方。如果在函数声明中绑定它们,那么如果要处理事件侦听器,则可以引用它们。
$ ->
class MyView extends Backbone.View
initialize: ->
stuff
$("body").on "click", ".stuff", @functionB
# alternatively, inline as an anonymous function (then you can
# leave the declaration of functionB below as `->` )
$("body").on "click", ".stuff", => @functionB(arguments...)
functionA: (new_date) ->
stuff
functionB: () =>
stuff