2012-04-10 18 views
8

MitErweiterung Benutzerdefinierte Backbone Ansicht

Backbone.View.extend 

ich eine Backbone-Ansicht erstellt haben genannt MyView. Aus meiner Sicht habe ich eine Reihe von benutzerdefinierten Funktionen erstellt. Das Problem, das ich habe, ist, dass ich eine neue Backbone-Ansicht erstellen muss, die MyView erweitert.

Ich möchte nicht eine neue Ansicht erstellen und Code duplizieren ... Ich möchte nur Vererbung verwenden, um die Funktionalität zu erweitern ... Das Problem ist, dass ich nicht den Weg kenne, es genau zu tun, und ich auch weiß nicht, wie man die super Funktionen in Backbone nennt.

* Edit - Vielen Dank für die Antworten von einigen unten, aber immer noch nicht ganz sicher, wie die Methode der Eltern zu nennen. Zum Beispiel:

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

Antwort

14

Ich denke, was Sie suchen ist:

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

Oder, wenn Sie die Superklasse aufrufen, suchen dann eine Implementierung davon gibt es hier: http://forrst.com/posts/Backbone_js_super_function-4co

+0

ich sehen, aber wie würde ich der Eltern-Methode aufrufen? – K2xL

+0

Ich bin mir nicht sicher, ob ich Ihnen folge ... sagen Sie, dass MyView die Methode doSomething() hatte, und wenn Sie NewView durch das Erweitern von MyView erstellen, sollten Sie NewView.doSomething(); –

+0

Siehe meine Bearbeitung oben – K2xL

0
var newView = MyView.extend() 

+0

perfekt, aber wie würde ich die übergeordneten Methoden/Funktionen innerhalb einer Override-Funktion nennen? – K2xL

0

ich weiß nicht, wie nützlich das ist, aber wenn Sie geben diese Coffee kompilieren:

class BaseView extends Backbone.View 

class MyView extends Baseview 

Es erzeugt dies:

(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

Gott, der meine Augen bluten lässt – tkone

+0

@tkone Sicher, aber sieh dir das coffeescript an :) – asawyer

+3

das ist das, worauf ich mich bezog! :) – tkone

7
var SubView = MainView.extend({ 

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

}); 
Verwandte Themen