我想扩展Ext.grid.TemplateColumn(http://dev.sencha.com/deploy/dev/docs/?class=Ext.grid.TemplateColumn)类以使用预定义的Xtemplate,但我希望它能够在传入渲染器时运行渲染器。 / p>
根据我的理解,TemplateColumn不接受自定义渲染器,因此我修改了我的类以从Ext.grid.Column扩展。但是,我意识到传入的渲染器本身就是一个函数。我很确定我不能将两个函数合并为一个,所以我不得不尝试将我的Xtemplate应用于列,然后应用传入的渲染器。
我也尝试过createInterceptor,但它也不能正常工作。
this.renderer.createInterceptor(function(value, p, r){
return tpl.apply(r.data);
});
如有必要,会发布其他代码。
答案 0 :(得分:1)
TemplateColumn在其构造函数中定义自己的渲染器,因此它将覆盖任何传入的渲染器配置选项。这是TemplateColumn的构造函数:
constructor: function(cfg){
Ext.grid.TemplateColumn.superclass.constructor.call(this, cfg);
var tpl = (!Ext.isPrimitive(this.tpl) && this.tpl.compile) ? this.tpl : new Ext.XTemplate(this.tpl);
this.renderer = function(value, p, r){
return tpl.apply(r.data);
};
this.tpl = tpl;
}
如果你想要一个自定义渲染器,你可以在渲染器上创建一个createInterceptor或createSequence后,在TemplateColumn原型的构造函数中设置它...首先在构造函数上创建一个序列,然后使用渲染器在渲染器上创建拦截器渲染器在配置对象上传入...像这样:
Ext.grid.TemplateColumn.prototype.constructor = Ext.grid.TemplateColumn.prototype.constructor.createSequence(function(config) {
this.renderer = this.renderer.createInterceptor(config.renderer);
});