2

イベントが発生した後にコンポーネントに追加されるカスタム プラグインがあります。このイベントは、コンポーネントがページにレンダリングされた後に発生します (afterrender イベントではなく、keyup イベントです)。したがって、プラグインもレンダリング後に追加されます。プラグインを有効にするには、何らかの方法でコンポーネントの構成を更新する必要があるようです。または、それを行う別の方法があるかもしれませんか?

4

1 に答える 1

2

これは可能ですが、プラグインの API ではサポートされていません。コード ベースには、このロジックを実行するユーティリティ メソッドがあります。Ext.apply(this, {plugins: ...})拡張およびインスタンス化されたクラスは構成を介してオンザフライでプラグインを追加できるため、クラスを定義するときはプラグイン adder 関数が優先されます。

これはオーバーライドで動作しています:

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]
于 2013-01-31T01:14:34.523 に答える