Condor
3 Apr 2009, 1:21 AM
The current relayEvents method inadvertently disables already registered event handlers.
Example:
Create a FormPanel with an actioncomplete listener.
The addListener call will initialize events['actioncomplete'] (set it to an Ext.util.Event instance).
The relayEvents call to relay beforeaction, actioncomplete and actionfailure events from the BasicForm will toggle events['actioncomplete'], setting it to false.
Fix:
Ext.override(Ext.util.Observable, {
relayEvents: function(o, events){
var me = this;
function createHandler(ename){
return function(){
return me.fireEvent.apply(me, [ename].concat(Ext.toArray(arguments)));
};
};
Ext.each(events, function(ename){
me.events[ename] = me.events[ename] || true;
o.on(ename, createHandler(ename), me);
});
}
});
Example:
Create a FormPanel with an actioncomplete listener.
The addListener call will initialize events['actioncomplete'] (set it to an Ext.util.Event instance).
The relayEvents call to relay beforeaction, actioncomplete and actionfailure events from the BasicForm will toggle events['actioncomplete'], setting it to false.
Fix:
Ext.override(Ext.util.Observable, {
relayEvents: function(o, events){
var me = this;
function createHandler(ename){
return function(){
return me.fireEvent.apply(me, [ename].concat(Ext.toArray(arguments)));
};
};
Ext.each(events, function(ename){
me.events[ename] = me.events[ename] || true;
o.on(ename, createHandler(ename), me);
});
}
});