57 lines
1.8 KiB
JavaScript
57 lines
1.8 KiB
JavaScript
//@require Ext.Class
|
|
//@require Ext.ClassManager
|
|
//@require Ext.Loader
|
|
|
|
/**
|
|
* Base class for all mixins.
|
|
* @private
|
|
*/
|
|
Ext.define('Ext.mixin.Mixin', {
|
|
onClassExtended: function(cls, data) {
|
|
var mixinConfig = data.mixinConfig,
|
|
parentClassMixinConfig,
|
|
beforeHooks, afterHooks;
|
|
|
|
if (mixinConfig) {
|
|
parentClassMixinConfig = cls.superclass.mixinConfig;
|
|
|
|
if (parentClassMixinConfig) {
|
|
mixinConfig = data.mixinConfig = Ext.merge({}, parentClassMixinConfig, mixinConfig);
|
|
}
|
|
|
|
data.mixinId = mixinConfig.id;
|
|
|
|
beforeHooks = mixinConfig.beforeHooks;
|
|
afterHooks = mixinConfig.hooks || mixinConfig.afterHooks;
|
|
|
|
if (beforeHooks || afterHooks) {
|
|
Ext.Function.interceptBefore(data, 'onClassMixedIn', function(targetClass) {
|
|
var mixin = this.prototype;
|
|
|
|
if (beforeHooks) {
|
|
Ext.Object.each(beforeHooks, function(from, to) {
|
|
targetClass.override(to, function() {
|
|
if (mixin[from].apply(this, arguments) !== false) {
|
|
return this.callOverridden(arguments);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
if (afterHooks) {
|
|
Ext.Object.each(afterHooks, function(from, to) {
|
|
targetClass.override(to, function() {
|
|
var ret = this.callOverridden(arguments);
|
|
|
|
mixin[from].apply(this, arguments);
|
|
|
|
return ret;
|
|
});
|
|
});
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
});
|