2

如何在主干(coffeescript)中调用超级的渲染功能?

如果不是在咖啡脚本中,我听说过

MyModel.__super__.render.call(this);

会起作用,但在这种情况下,MyModel 是exports.MyModel,如果它是exports 的一个元素,我该如何使用它?

提前致谢

4

2 回答 2

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文档建议render返回this

于 2012-07-12T20:24:59.570 回答
1

在 Backbone 环境中,coffeescript 类方法有一些缺点:

  1. 使用class SecondaryLevelClass extends TopLevelClass语法会改变传统的 Backbone 扩展模型,这可能会造成混淆。
  2. 它会生成大量的 JS 代码,并且您已经加载了 Backbone/Underscore 的扩展代码。

使用常规的 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/

于 2013-05-22T23:49:59.253 回答