2012-07-12 60 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/