2012-06-09 111 views
0

我正在使用.extend()試驗設置我的意見並初始化他們。我發現分配配置變量來查看嵌套在層次結構深處的對象是很方便的。Backbone.js擴展和這

我的問題是,我的意見失去了他們的這個上下文。這成爲我認爲是構造函數的對象。我怎樣才能解決這個問題?

我的咖啡是下面。第一類將被嵌套在一個樹深處,第二個是在頂層,其中應用程序啓動時:

# This is a child somewhere deep within a tree of views. 
class View extends Backbone.View 
    initialize: -> 
    console.log @ # returns object ctor 

MyView = View.extend({ 
    initialize: -> 
    # do config stuff then init prototype 
    App.Views.MyView.prototype.initialize() 
}) 

view = new MyView 

回答

4

兩件事情:

第一,而不是作爲重要的是,你可以使用

class MyView extends View 

,而不是View.extend。 CoffeeScript類和Backbone類可以互操作。

第二代,這是最重要的部分,而不是

App.Views.MyView.prototype.initialize() 

,你只需要使用CoffeeScript的關鍵字

super 

這有效地做同樣的事情,而且也保證了功能在正確的上下文中調用。獎金:它也傳遞給你所有的函數參數。

如果你很好奇,super這裏編譯成

initialize.__super__.constructor.apply(this, arguments) 

(其中__super__是對正在通過兩個CoffeeScript中的extends設定的超類的引用)。閱讀關於applyat MDN

+0

我在想擴展()和擴展,我也用超級。也許我做了一些錯誤的事情。感謝那! – Rimian

0

我的咖啡腳本的心不是那麼熱,但你可以調用函數發送你想成爲的觀點這在作爲第一個參數

的價值,我想在standardish JS

var view = null; 
MyView = View.extend({ 
    initialize: function() { 
    // do config stuff then init prototype 
    App.Views.MyView.prototype.initialize.call(view) 
    } 
}) 
view = new MyView; 

林不知道你有機會在該點或產生JS無論是。 點如果你有機會應該是什麼這樣做的價值,當你打電話,你應該能夠將它傳遞的功能之中。

我會檢查自己,但我不理解的CoffeeScript :)