首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在子类视图呈现之后呈现超类视图?

如何在子类视图呈现之后呈现超类视图?
EN

Stack Overflow用户
提问于 2012-09-15 07:32:19
回答 3查看 1.6K关注 0票数 2

我不能调用超类的渲染

代码语言:javascript
复制
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();

我想先调用子类呈现,然后调用超类呈现。在某些情况下,超类先呈现,然后再呈现子类。

因此,是否可以根据用户的要求在调用超类呈现之前或之后,在不更改超类和不更改函数名称的情况下编写子类呈现。

那我错过了什么?

谢谢,提前。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-15 09:29:10

我在这里可能遗漏了一些东西,但是您可以在Sub.render函数中调用Super上的呈现方法:

代码语言:javascript
复制
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/

票数 4
EN

Stack Overflow用户

发布于 2012-09-15 07:52:08

另一种方法:

代码语言:javascript
复制
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等)。

更新:如果您不能修改超级程序,那么可以尝试:

代码语言:javascript
复制
Sub = Super.extend({
    initialize : function () {
       if (this.render) {
           var render = this.render;
           this.render = function () {
               render.call(this);
               // sub class render code goes here
           };
       }
    }
});
票数 1
EN

Stack Overflow用户

发布于 2012-09-15 08:08:26

您可以根据需要构造生命周期。

例如,

在超级

代码语言:javascript
复制
...
preRender_: function () {
    // maybe empty, for override
    ...
},
render_: function () {
    // do real render here
    ...
},
postRender_: function () {
    // maybe empty, for override
    ...
},
render: function () {
    preRender_();
    render_();
    postRender_();
}

在潜艇中

代码语言:javascript
复制
// override preRender_, render_ or postRender_ as needed
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12435501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档