/ / Come posso eseguire il rendering della vista superclasse dopo il rendering della vista sottoclasse? - javascript, oop, backbone.js, viste backbone

Come posso renderizzare una vista super class dopo il rendering della vista di sottoclasse? - javascript, oop, backbone.js, viste backbone

non posso chiamare il rendering di super class

Super = Backbone.View.extend({

render : function(){
//super class code here   (unable to call)
return this;
}

});

Sub = Super.extend({

render : function(){
//sub class code here    (called)
return this;
}

});

var view = new Sub();
view.render();

voglio prima chiamare il rendering sottoclasse e poi il rendering superclasse. in alcuni casi, il rendering superclasse prima e poi il rendering subclasse.

così, è possibile codificare sottoclasse render che chiamare il rendering superclasse prima o dopo secondo il requisito dell'utente, senza cambiare la classe Super e senza cambiare il nome della funzione.

Quindi, cosa mi sto perdendo?

Grazie in anticipo.

risposte:

4 per risposta № 1

Potrei mancare qualcosa qui, ma puoi chiamare il metodo di rendering sul prototipo di Super nel tuo Sub.render funzione :

Super = Backbone.View.extend({
render : function(){
console.log("super render");
return this;
}
});

Sub = Super.extend({
render : function(){
console.log("sub render");
Super.prototype.render.call(this);
return this;
}
});

var view = new Sub();
view.render();

E un violino http://jsfiddle.net/WATqe/


1 per risposta № 2

Un approccio diverso:

Super = Backbone.View.extend({

render : function(){
//super class code here   (unable to call)
if (typeof this.postRender === "function") {
this.postRender();
}
return this;
}

});

Sub = Super.extend({

postRender : function(){
//sub class code here    (called)
return this;
}

});

var view = new Sub();
view.render();

view.render () chiamerebbe render sul super, che poi chiamerebbe postRender se esiste indipendentemente da dove è definito postRender (super, sub, subsub, ecc.).

AGGIORNAMENTO: Se non riesci a modificare super allora puoi provare:

Sub = Super.extend({
initialize : function () {
if (this.render) {
var render = this.render;
this.render = function () {
render.call(this);
// sub class render code goes here
};
}
}
});

0 per risposta № 3

Puoi costruire il ciclo di vita secondo necessità

per esempio.,

in super

...
preRender_: function () {
// maybe empty, for override
...
},
render_: function () {
// do real render here
...
},
postRender_: function () {
// maybe empty, for override
...
},
render: function () {
preRender_();
render_();
postRender_();
}

nel sub

// override preRender_, render_ or postRender_ as needed