2012-07-12 61 views
2

如何在backbone(coffeescript)中调用super的渲染函数?Backbone Coffeescript Super Render

如果不是在CoffeeScript中,我听说

MyModel.__super__.render.call(this); 

的工作,但为MyModel在这种情况下是exports.MyModel,我怎么使用这个功能,如果其出口的元素?

在此先感谢

+0

你是从子类的渲染函数内部调用渲染吗? – Sandro 2012-07-12 20:08:59

+0

是的,这就是我要去的 – willm 2012-07-12 20:11:57

回答

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

+0

谢谢你的帮助 – willm 2012-07-12 20:39:20

+1

render应该返回这个 – 2012-07-13 13:19:45

+0

如果其他人想知道,如果你使用传统的主干方法来做'SecondaryLevelClass = TopLevelClass.extend',你实际上需要使用CoffeeScript提供的'extends'语法 – SimplGy 2013-05-22 23:38:39

1

也有一些弊端,给CoffeeScript的类方法中的骨干环境:

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

这可能是值得使用常规的骨干与调用一个更详细的方式超强的权衡扩展语法,就像这样:

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/