我有一个自定义插件,可以在一些事件触发后添加到组件中。在将组件呈现到页面之后,事件将触发(虽然它不是afterrender事件,但它是一个keyup事件)。因此插件也会在渲染后添加。似乎我需要以某种方式刷新组件的配置以使插件生效。或者可能还有另一种方法可以做到这一点?
答案 0 :(得分:2)
这可以完成,但插件的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]