Как добавить плагин к компоненту после рендера?

У меня есть собственный плагин, который нужно добавить к компоненту после возникновения какого-либо события. Событие срабатывает после того, как компонент был отрендерен на странице (хотя это не событие afterrender, это событие keyup). Таким образом, плагин также добавляется после рендера. Кажется, мне нужно как-то обновить конфиги компонента, чтобы плагин заработал. Или может быть есть другой способ сделать это?


person paperstreet7    schedule 30.01.2013    source источник


Ответы (1)


Это можно сделать, но это не поддерживается API плагина. В нашей базе кода у нас есть служебный метод, который реализует эту логику. Функция добавления плагинов предпочтительнее при определении классов поверх Ext.apply(this, {plugins: ...}), потому что расширяющие и созданные классы позволяют добавлять плагины на лету через конфигурацию.

Вот он работает с переопределением:

Ext.override(Ext.Component, {
    addPlugin: function(p) {
        //constructPlugin is private.
        //it handles the various types of acceptable forms for
        //a plugin
        var plugin = this.constructPlugin(p);
        this.plugins = Ext.Array.from(this.plugins);

        this.plugins.push(plugin);

        //pluginInit could get called here but
        //the less use of private methods the better
        plugin.init(this);

        return plugin;
    }
});
//EXAMPLE
Ext.define('PluginLogger', {
    extend: 'Ext.AbstractPlugin',
    alias: 'plugin.logger',
    init: function(c) {
        console.log(c.plugins);
    }
});

var comp = new Ext.Component({
    plugins: 'logger'
});
//logs [plugin]

comp.addPlugin({
    ptype: 'logger'
});
// logs [plugin, plugin]
person pllee    schedule 31.01.2013