Skip to content

Instantly share code, notes, and snippets.

@pguerrant
Created November 9, 2013 00:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pguerrant/7379973 to your computer and use it in GitHub Desktop.
Save pguerrant/7379973 to your computer and use it in GitHub Desktop.
Initialization of hasListeners object on class prototypes
Ext.define('Observable', {
hasListeners: {},
observableType: 'observable',
onClassMixedIn: function(Class) {
var prototype = Class.prototype;
if (prototype.hasOwnProperty('observableType')) {
prototype.hasListeners = {};
}
Class.onExtended(function(Class, data) {
if (data.observableType) {
data.hasListeners = {};
}
});
},
onClassExtended: function(Class, data) {
if (data.observableType) {
data.hasListeners = {};
}
}
});
Ext.define('Component', {
mixins: ['Observable'],
observableType: 'component'
});
Ext.define('Button', {
extend: 'Component'
});
Ext.define('SplitButton', {
extend: 'Button',
observableType: 'splitbutton'
});
console.log(Component.prototype.hasOwnProperty('hasListeners')); // true
console.log(Button.prototype.hasOwnProperty('hasListeners')); // false
console.log(SplitButton.prototype.hasOwnProperty('hasListeners')); // true
Ext.define('Foo', {
extend: 'Observable',
observableType: 'foo'
});
Ext.define('Bar', {
extend: 'Foo'
});
Ext.define('Baz', {
extend: 'Bar',
observableType: 'baz'
});
console.log(Foo.prototype.hasOwnProperty('hasListeners')); // true
console.log(Bar.prototype.hasOwnProperty('hasListeners')); // false
console.log(Baz.prototype.hasOwnProperty('hasListeners')); // true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment