2012-04-10 1 views
8

Utilizzandoestensione personalizzata Backbone Vedi

Backbone.View.extend 

ho creato un Backbone vista chiamata MyView. Dal mio punto di vista ho creato un sacco di funzioni personalizzate. Il problema che sto avendo è che ho bisogno di creare una nuova vista Backbone che estende MyView.

Non voglio creare un nuovo codice Visualizza e duplica ... Voglio solo utilizzare l'ereditarietà per estendere la funzionalità ... Il problema è che non conosco il modo di farlo esattamente, e anche io non so come chiamare le funzioni super in Backbone.

* Modifica - Grazie per le risposte fornite da alcuni di seguito, ma ancora non del tutto sicuro su come chiamare il metodo del genitore. Per esempio:

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

risposta

14

Penso che quello che stai cercando è:

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

O, se si sta cercando di chiamare la classe Super poi c'è un'implementazione di qui: http://forrst.com/posts/Backbone_js_super_function-4co

+0

vedo, ma come potrei chiamare il metodo del genitore? – K2xL

+0

Non sono sicuro di seguirti ... dire che MyView aveva il metodo doSomething(), quindi quando crei NewView estendendo MyView, dovresti essere in grado di chiamare NewView.doSomething(); –

+0

Vedere la mia modifica sopra – K2xL

0
var newView = MyView.extend() 

+0

perfetto, ma come chiamerei i metodi/le funzioni principali all'interno di una funzione di sostituzione? – K2xL

0

non so quanto sia utile questo è, ma se si entra compilare questo CoffeeScript:

class BaseView extends Backbone.View 

class MyView extends Baseview 

Genera questo:

(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

Dio che mi sanguina gli occhi – tkone

+0

@tkone Certo, ma guarda il coffeescript :) – asawyer

+3

questo è quello che mi riferivo! :) – tkone

7
var SubView = MainView.extend({ 

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

});