【问题标题】:Backbone .on event listener with callback function with coffeescriptBackbone .on 事件监听器,带有咖啡脚本的回调函数
【发布时间】:2015-12-12 02:51:40
【问题描述】:

我怎样才能在咖啡脚本中正确地写这个?

this.model.on('change:game', function(){
  this.render();
}, this)

我正在尝试我能想到的一切,我目前正在这样做:

@model.on 'change:game', -> 
  @render()
@

当其中一个参数是匿名函数时,我很困惑如何处理多个参数,前两个参数有一个逗号,但是如果我尝试在第三个参数之前添加一个逗号,我会遇到语法错误。

【问题讨论】:

    标签: javascript backbone.js coffeescript


    【解决方案1】:

    您实际上并不需要匿名函数。当你说:

    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】:

      我相信你可以这样做:

      @model.on "change:game", => @render()
      

      使用 CoffeeScript,您可以利用“胖”箭头在词法上绑定 this 并简化您的代码。

      【讨论】:

        【解决方案3】:

        你有四种方式:

        1. 简单

          @model.on 'change:game', ->
            @render()
          , @
          
        2. 胖箭头

          @model.on 'change:game', => @render()
          
        3. 没有匿名函数

          @model.on 'change:game', @render, @
          
        4. 带括号

          @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
        

        【讨论】:

          猜你喜欢
          • 2012-05-04
          • 2021-06-12
          • 1970-01-01
          • 2013-10-28
          • 1970-01-01
          • 2012-05-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多