Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在渲染后向组件添加插件?_Javascript_Extjs_Javascript Framework - Fatal编程技术网

Javascript 如何在渲染后向组件添加插件?

Javascript 如何在渲染后向组件添加插件?,javascript,extjs,javascript-framework,Javascript,Extjs,Javascript Framework,我有一个自定义插件,它将在一些事件触发后添加到组件中。该事件在组件被呈现到页面后激发(但不是afterrender事件,而是一个keyup事件)。因此,该插件也是在渲染后添加的。似乎我需要以某种方式刷新组件的配置,以使插件生效。或者有没有其他方法可以做到这一点 这可以做到,但插件的api不支持。在我们的代码库中,我们有一个实用方法来实现这个逻辑。在Ext.apply(this,{plugins:…})上定义类时,首选plugin adder函数,因为允许扩展和实例化类通过配置动态添加插件 以下是

我有一个自定义插件,它将在一些事件触发后添加到组件中。该事件在组件被呈现到页面后激发(但不是afterrender事件,而是一个keyup事件)。因此,该插件也是在渲染后添加的。似乎我需要以某种方式刷新组件的配置,以使插件生效。或者有没有其他方法可以做到这一点

这可以做到,但插件的api不支持。在我们的代码库中,我们有一个实用方法来实现这个逻辑。在
Ext.apply(this,{plugins:…})
上定义类时,首选plugin 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]