Backbone Coffeescript Super Render

时间:2012-07-12 19:57:48

标签: javascript inheritance backbone.js coffeescript

如何在骨干(coffeescript)中调用super的渲染功能?

如果不是coffeescript,我听说过

MyModel.__super__.render.call(this);

可以工作,但在这种情况下MyModel是exports.MyModel,如果它是一个导出元素,我如何使用这个函数?

提前致谢

2 个答案:

答案 0 :(得分:1)

由于你试图从渲染方法中调用超级渲染方法,你可以这样:

class TopLevelClass extends Backbone.View
  initialize: ->
    @render()

  render: ->
    console.log 'Render TopLevelClass'
    @ # return this

class SecondaryLevelClass extends TopLevelClass
  initialize: ->
    @render()

  render: ->
    super()
    console.log 'Render SecondaryLevelClass'
    @ # return this

t = new TopLevelClass
  # el: $("#first_div")
s = new SecondaryLevelClass
  # el: $("#second_div")

来源: http://coffeescript.org/#classes

编辑: @lublushokolad是对的。 Backbone documentation建议render返回this

答案 1 :(得分:1)

Backbone环境中的coffeescript类方法存在一些缺点:

  1. 使用class SecondaryLevelClass extends TopLevelClass语法更改了传统的Backbone扩展模型,这可能令人困惑。
  2. 它生成了很多JS代码,你已经加载了Backbone / Underscore的扩展代码。
  3. 使用常规的Backbone扩展语法可能值得以更冗长的方式调用super的权衡,如下所示:

    TopLevelClass Backbone.View.extend
      initialize: -> @render()
      render: ->
        console.log 'Render TopLevelClass'
        @
    
    SecondaryLevelClass = TopLevelClass.extend
      initialize: -> @render()
      render: ->
        SecondaryLevelClass.__super__.initialize.call(this)
        console.log 'Render SecondaryLevelClass'
        @
    
    t = new TopLevelClass # el: $("#first_div")
    s = new SecondaryLevelClass # el: $("#second_div")
    

    另一种选择是这样的混合:http://pivotallabs.com/a-convenient-super-method-for-backbone-js/