我有一个窗口组件,我正在扩展以创建不同的窗口。现在,close()
和hide()
侦听器功能在整个板上是相同的,但每个实例的afterrender()
都会发生变化。
所以我有类似的东西:
Ext.define('abc.xyz.BaseWindow', {
extend : "Ext.Window",
listeners: {
hide: function(el, eOpts){
console.log('hide');
},
close: function(el, eOpts){
console.log('close');
}
}
});
和
Ext.define('abc.xyz.MyWindow', {
extend : "abc.xyz.BaseWindow",
listeners: {
afterrender: function(el, eOpts){
console.log('afterrender');
}
}
});
但是,整个listeners
对象被覆盖,hide()
和close()
永远不会被调用。除非在每个扩展窗口中指定hide()
和close()
,否则有什么方法吗?
答案 0 :(得分:5)
您可以在窗口中定义您的功能,调用它们并在窗口中覆盖它们,如下所示:
Ext.define('abc.xyz.BaseWindow', {
extend : "Ext.Window",
onHide: function(){
console.log('hide');
},
onShow: function(el, eOpts){
console.log('close');
},
onAfterRender: function(el, eOpts){
console.log('first after render');
},
initComponent: function () {
var me = this;
Ext.applyIf(me, {
listeners: {
hide: me.onHide,
show: me.onShow
afterrender: me.onAfterRender
}
});
me.callParent(arguments);
}
});
和
Ext.define('abc.xyz.MyWindow', {
extend : "abc.xyz.BaseWindow",
onAfterRender: function(el, eOpts){
console.log('second after render');
}
});
或者,如果你没有在基类中有一个后悔者,你只需添加一个像(在)上的听众,如Evan Trimboli sais
Ext.define('abc.xyz.MyWindow', {
extend : "abc.xyz.BaseWindow",
initComponent: function () {
var me = this;
me.callParent(arguments);
me.on('afterrender', function(el, eOpts){
console.log('second after render');
});
}
});