Как добавить пользовательский рендерер при расширении класса Ext.grid.TemplateColumn? - PullRequest
2 голосов
/ 18 февраля 2011

Я бы хотел расширить класс Ext.grid.TemplateColumn (http://dev.sencha.com/deploy/dev/docs/?class=Ext.grid.TemplateColumn)), чтобы использовать предопределенный Xtemplate, однако мне бы хотелось, чтобы он по-прежнему мог запускать средство визуализации при его передаче.

Насколько я понимаю, TemplateColumn не принимает пользовательский рендерер, поэтому я изменил свой класс, чтобы расширить его от Ext.grid.Column. Однако затем я понял, что переданное средство визуализации является самой функцией. Я почти уверен, что не могу объединить две функции в одну, поэтому я застрял, пытаясь применить свой Xtemplate к столбцу и все же применить переданный рендер.

Я также пытался создать createInterceptor, но он также не работает.

this.renderer.createInterceptor(function(value, p, r){
    return tpl.apply(r.data);
});

Опубликует дополнительные коды при необходимости.

1 Ответ

1 голос
/ 23 февраля 2011

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);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...