telegramhangoutsslackgmailskypefacebook-workplaceoutlookemailmicrosoft-teamsdiscordmessengercustom-servicesmacoslinuxwindowsinboxwhatsappicloudtweetdeckhipchat
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
3.3 KiB
110 lines
3.3 KiB
9 years ago
|
/**
|
||
|
* @private
|
||
|
*/
|
||
|
Ext.define('Ext.Evented', {
|
||
|
|
||
|
alternateClassName: 'Ext.EventedBase',
|
||
|
|
||
|
mixins: [
|
||
|
'Ext.mixin.Observable'
|
||
|
],
|
||
|
|
||
|
statics: {
|
||
|
generateSetter: function (cfg) {
|
||
|
var names = cfg.names,
|
||
|
name = cfg.name,
|
||
|
prefixedName = names.internal,
|
||
|
applyName = names.apply,
|
||
|
changeEventName = names.changeEvent,
|
||
|
doSetName = names.doSet;
|
||
|
|
||
|
return function(value) {
|
||
|
var me = this,
|
||
|
internalName = me.$configPrefixed ? prefixedName : name,
|
||
|
initialized = me.initialized,
|
||
|
oldValue,
|
||
|
applier = me[applyName];
|
||
|
|
||
|
if (applier) {
|
||
|
value = applier.call(me, value, me[internalName]);
|
||
|
if (value === undefined) {
|
||
|
return me;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// The old value might have been changed at this point
|
||
|
// (after the apply call chain) so it should be read here
|
||
|
oldValue = me[internalName];
|
||
|
|
||
|
if (value !== oldValue) {
|
||
|
if (initialized) {
|
||
|
me.fireAction(changeEventName, [me, value, oldValue], me.doSet, me, {
|
||
|
nameMap: names
|
||
|
});
|
||
|
}
|
||
|
else {
|
||
|
me[internalName] = value;
|
||
|
if (me[doSetName]) {
|
||
|
me[doSetName](value, oldValue);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return this;
|
||
|
};
|
||
|
}
|
||
|
},
|
||
|
|
||
|
initialized: false,
|
||
|
|
||
|
constructor: function(config) {
|
||
|
this.mixins.observable.constructor.call(this, config);
|
||
|
this.initialized = true;
|
||
|
},
|
||
|
|
||
|
doSet: function(me, value, oldValue, options) {
|
||
|
var nameMap = options.nameMap;
|
||
|
|
||
|
me[nameMap.internal] = value;
|
||
|
if (me[nameMap.doSet]) {
|
||
|
me[nameMap.doSet].call(this, value, oldValue);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
onClassExtended: function(cls, data) {
|
||
|
if (!data.hasOwnProperty('eventedConfig')) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var config = data.config,
|
||
|
eventedConfig = data.eventedConfig,
|
||
|
cacheName = 'eventedSetter',
|
||
|
name, cfg;
|
||
|
|
||
|
if (config) {
|
||
|
Ext.applyIf(config, eventedConfig);
|
||
|
} else {
|
||
|
cls.addConfig(eventedConfig);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* These are generated setters for eventedConfig
|
||
|
*
|
||
|
* If the component is initialized, it invokes fireAction to fire the event as well,
|
||
|
* which indicate something has changed. Otherwise, it just executes the action
|
||
|
* (happens during initialization)
|
||
|
*
|
||
|
* This is helpful when we only want the event to be fired for subsequent changes.
|
||
|
* Also it's a major performance improvement for instantiation when fired events
|
||
|
* are mostly useless since there's no listeners
|
||
|
*/
|
||
|
for (name in eventedConfig) {
|
||
|
if (eventedConfig.hasOwnProperty(name)) {
|
||
|
cfg = Ext.Config.get(name);
|
||
|
data[cfg.names.set] = cfg[cacheName] ||
|
||
|
(cfg[cacheName] = this.generateSetter(cfg));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
});
|