我怎样才能在咖啡脚本中正确地写这个?
this.model.on('change:game', function(){
this.render();
}, this)
我正在尝试我能想到的一切,而我现在正在考虑这个问题:
@model.on 'change:game', ->
@render()
@
我很困惑如何处理多个参数,当其中一个是匿名函数时,前两个参数都有一个逗号,但如果我尝试在第三个参数之前添加一个逗号,我会得到语法错误。
答案 0 :(得分:2)
我相信你可以这样做:
@model.on "change:game", => @render()
使用CoffeeScript,您可以利用" fat"箭头以词法绑定this
并简化您的代码。
答案 1 :(得分:2)
您实际上并不需要匿名功能。当你说:
model.on(event, fn, context)
在JavaScript中,事件处理系统最终会说:
fn.apply(context, whatever_arguments_are_used)
fn
可以通过任何功能,它不必是匿名的。
转到CoffeeScript并记住@render
是对render
函数的引用,我们可以说:
@model.on 'change:game', @render, @
并完全跳过匿名函数。或者,您可以使用listenTo
自动提供所需的@
:
@listenTo @model, 'change:game', @render
如果上面的fn
获取的参数不匹配事件系统将传递的内容,则此类结构可能会出现问题。在这些情况下,您可以使用bound anonymous function as wmock suggests,您找到的多线方法或一些括号:
@model.on 'change:game', (-> @render()), @
# ^ ^
再次或listenTo
:
@listenTo @model, 'change:game', -> @render()
答案 2 :(得分:0)
您有四种方式:
简单
@model.on 'change:game', ->
@render()
, @
胖箭
@model.on 'change:game', => @render()
没有匿名功能
@model.on 'change:game', @render, @
带括号
@model.on 'change:game', (-> @render()), @
关于如何处理多个参数的第二个问题,其中一些参数是匿名函数。
四个例子,解释了一切:
func param1, () ->
# anonymous function 1
return
func param1, () ->
# anonymous function 1
return
, param2
func param1, () ->
# anonymous function 1
return
, () ->
# anonymous function 2
return
func param1, () ->
# anonymous function 1
return
, param2, () ->
# anonymous function 2
return