2012-04-10 38 views
8

Usandovista personalizada

Backbone.View.extend 

He creado una red troncal Ver llamado MyView. En mi opinión, he creado un conjunto de funciones personalizadas. El problema que estoy teniendo es que necesito crear una nueva vista Backbone que extienda MyView.

No quiero crear una nueva Vista y código duplicado ... Solo quiero utilizar la herencia para ampliar la funcionalidad ... El problema es que no sé la manera de hacerlo exactamente, y también no sé cómo llamar a las funciones super en Backbone.

* Editar - Gracias por las respuestas de algunos a continuación, pero aún no estoy muy seguro de cómo llamar al método de los padres. Por ejemplo:

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

Respuesta

14

creo que lo que estás buscando es:

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

O, si usted está mirando para llamar a la superclase entonces no es una implementación de aquí: http://forrst.com/posts/Backbone_js_super_function-4co

+0

veo, pero ¿cómo iba a llamar al método de los padres? – K2xL

+0

No estoy seguro de que te estoy siguiendo ... di que MyView tenía el método doSomething(), luego cuando creas NewView extendiendo MyView, deberías poder llamar a NewView.doSomething(); –

+0

Ver mi edición anterior – K2xL

0
var newView = MyView.extend() 

+0

perfecto, pero ¿cómo podría llamar a los métodos/funciones principales dentro de una función de anulación? – K2xL

0

no sé lo útil que es, pero si entras compilar este CoffeeScript:

class BaseView extends Backbone.View 

class MyView extends Baseview 

Genera esto:

(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

Dios que hace que mis ojos sangren – tkone

+0

@tkone Claro, pero mira el coffeescript :) – asawyer

+3

¡eso es a lo que me refería! :) – tkone

7
var SubView = MainView.extend({ 

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

}); 
Cuestiones relacionadas