【问题标题】:Backbone Coffeescript Super RenderBackbone Coffeescript 超级渲染
【发布时间】:2012-07-12 15:57:08
【问题描述】:

如何在主干(coffeescript)中调用 super 的渲染函数?

如果不在coffeescript中,我听说过

MyModel.__super__.render.call(this);

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

提前致谢

【问题讨论】:

  • 你是从子类的render函数内部调用render吗?
  • 是的,这就是我的目标

标签: javascript inheritance backbone.js coffeescript


【解决方案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

【讨论】:

  • 如果其他人想知道,如果你使用传统的主干方法SecondaryLevelClass = TopLevelClass.extend,这不起作用,你实际上需要使用CoffeeScript提供的extends语法
【解决方案2】:

在 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")

另一个选项是这样的 mixin:http://pivotallabs.com/a-convenient-super-method-for-backbone-js/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 2012-11-15
    • 2012-09-08
    • 2011-12-11
    相关资源
    最近更新 更多