web-apps/vendor/touch/src/Evented.js
Maxim Kadushkin 741b10515d webapps added
2016-03-10 21:48:53 -03:00

106 lines
3.2 KiB
JavaScript

/**
* @private
*/
Ext.define('Ext.Evented', {
alternateClassName: 'Ext.EventedBase',
mixins: ['Ext.mixin.Observable'],
statics: {
generateSetter: function(nameMap) {
var internalName = nameMap.internal,
applyName = nameMap.apply,
changeEventName = nameMap.changeEvent,
doSetName = nameMap.doSet;
return function(value) {
var initialized = this.initialized,
oldValue = this[internalName],
applier = this[applyName];
if (applier) {
value = applier.call(this, value, oldValue);
if (typeof value == 'undefined') {
return this;
}
}
// The old value might have been changed at this point
// (after the apply call chain) so it should be read again
oldValue = this[internalName];
if (value !== oldValue) {
if (initialized) {
this.fireAction(changeEventName, [this, value, oldValue], this.doSet, this, {
nameMap: nameMap
});
}
else {
this[internalName] = value;
if (this[doSetName]) {
this[doSetName].call(this, value, oldValue);
}
}
}
return this;
}
}
},
initialized: false,
constructor: function(config) {
this.initialConfig = config;
this.initialize();
},
initialize: function() {
this.initConfig(this.initialConfig);
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(Class, data) {
if (!data.hasOwnProperty('eventedConfig')) {
return;
}
var ExtClass = Ext.Class,
config = data.config,
eventedConfig = data.eventedConfig,
name, nameMap;
data.config = (config) ? Ext.applyIf(config, eventedConfig) : 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)) {
nameMap = ExtClass.getConfigNameMap(name);
data[nameMap.set] = this.generateSetter(nameMap);
}
}
}
});