Javascript 主干咖啡脚本超级渲染

Javascript 主干咖啡脚本超级渲染,javascript,inheritance,backbone.js,coffeescript,Javascript,Inheritance,Backbone.js,Coffeescript,如何在主干中调用super的渲染函数(coffeescript) 如果不是咖啡脚本,我听说了 MyModel.__super__.render.call(this); 将起作用,但本例中的MyModel是exports.MyModel,如果它是exports的一个元素,如何使用此函数 提前感谢因为您正试图从渲染方法内部调用超级渲染方法,所以您可以这样做: class TopLevelClass extends Backbone.View initialize: -> @ren

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

如果不是咖啡脚本,我听说了

MyModel.__super__.render.call(this);
将起作用,但本例中的MyModel是exports.MyModel,如果它是exports的一个元素,如何使用此函数


提前感谢

因为您正试图从渲染方法内部调用超级渲染方法,所以您可以这样做:

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")
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")
资料来源:

编辑:
@卢布卢索科拉德是正确的。建议
render
返回

主干网环境中的coffeescript类方法存在一些缺点:

  • 使用
    class SecondaryLevelClass扩展TopLevelClass
    语法改变了传统的主干扩展模型,这可能会让人困惑
  • 它生成了大量JS代码,并且您已经加载了主干/下划线的扩展代码
  • 可能值得使用常规主干扩展语法,以更详细的方式调用super,如下所示:

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

    另一个选项是这样的混合:

    您是从子类的render函数内部调用render吗?是的,这就是我要说的,如果其他人想知道,如果您使用传统的主干方法执行
    SecondaryLevelClass=TopLevelClass.extend
    ,这是行不通的,实际上,您确实需要使用CoffeeScript提供的
    扩展
    语法