2012-04-10 68 views
8

使用擴展定製骨幹查看

Backbone.View.extend 

我創建了一個骨幹視圖稱爲MyView的。在我看來,我創建了一堆自定義函數。我遇到的問題是我需要創建一個新的Backbone視圖,擴展了MyView

我不想創建一個新的視圖和重複的代碼...我只是想利用繼承來擴展功能......問題是我不知道如何做到這一點,我也是不知道如何在Backbone中調用super函數。

*編輯 - 感謝下面的一些答案,但仍不太清楚如何調用父母的方法。例如:

// in subView 
{ 
initialize: function(){ 
// would like to do something like super.initialize() 
// here i would then declare variables exclusive to subview 
} 

回答

14

我想你要找的是什麼:

var NewView = MyView.extend({ 
    //Usual config goes on in here, and it will have inherited functions 
    //And default properties from MyView 
}); 

或者,如果你正在尋找調用超類再有就是在這裏它的實現: http://forrst.com/posts/Backbone_js_super_function-4co

+0

我明白了,可是我怎麼會調用父類的方法? – K2xL 2012-04-10 18:38:09

+0

我不確定我是否關注你...說MyView有方法doSomething(),那麼當你通過擴展MyView創建NewView時,你應該可以調用NewView.doSomething(); – 2012-04-10 18:40:11

+0

看我上面編輯 – K2xL 2012-04-10 18:40:55

0
var newView = MyView.extend() 

+0

完美,但我將如何調用覆蓋函數內的父方法/函數? – K2xL 2012-04-10 18:38:53

0

我不知道這是多麼有用的,但是如果你進入這個編譯CoffeeScript的:

class BaseView extends Backbone.View 

class MyView extends Baseview 

它會產生這樣的:

(function() { 
    var BaseView, MyView, 
    __hasProp = Object.prototype.hasOwnProperty, 
    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor; child.__super__ = parent.prototype; return child; }; 

    BaseView = (function(_super) { 

    __extends(BaseView, _super); 

    function BaseView() { 
     BaseView.__super__.constructor.apply(this, arguments); 
    } 

    return BaseView; 

    })(Backbone.View); 

    MyView = (function(_super) { 

    __extends(MyView, _super); 

    function MyView() { 
     MyView.__super__.constructor.apply(this, arguments); 
    } 

    return MyView; 

    })(Baseview); 

}).call(this); 
+12

上帝,讓我的眼睛流血 – tkone 2012-04-10 17:59:35

+0

@tkone當然,但看看coffeescript :) – asawyer 2012-04-10 18:55:25

+3

多數民衆贊成在我指的是! :) – tkone 2012-04-10 18:58:50

7
var SubView = MainView.extend({ 

    initialize: function(options) { 
     this.constructor.__super__.initialize.apply(this); 
    } 

});