我不能调用超类的渲染
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();我想先调用子类呈现,然后调用超类呈现。在某些情况下,超类先呈现,然后再呈现子类。
因此,是否可以根据用户的要求在调用超类呈现之前或之后,在不更改超类和不更改函数名称的情况下编写子类呈现。
那我错过了什么?
谢谢,提前。
发布于 2012-09-15 09:29:10
我在这里可能遗漏了一些东西,但是您可以在Sub.render函数中调用Super上的呈现方法:
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();和一个Fiddle http://jsfiddle.net/WATqe/
发布于 2012-09-15 07:52:08
另一种方法:
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()将调用超级服务器上的呈现,如果它存在,则调用postRender,而不管postRender在何处定义(postRender、sub、sub等)。
更新:如果您不能修改超级程序,那么可以尝试:
Sub = Super.extend({
initialize : function () {
if (this.render) {
var render = this.render;
this.render = function () {
render.call(this);
// sub class render code goes here
};
}
}
});发布于 2012-09-15 08:08:26
您可以根据需要构造生命周期。
例如,
在超级
...
preRender_: function () {
// maybe empty, for override
...
},
render_: function () {
// do real render here
...
},
postRender_: function () {
// maybe empty, for override
...
},
render: function () {
preRender_();
render_();
postRender_();
}在潜艇中
// override preRender_, render_ or postRender_ as neededhttps://stackoverflow.com/questions/12435501
复制相似问题