Skip to content

Instantly share code, notes, and snippets.

@cpojer
Created February 8, 2011 23:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save cpojer/817560 to your computer and use it in GitHub Desktop.
Save cpojer/817560 to your computer and use it in GitHub Desktop.
// Element Listener Mixin
(function(){
var setup = function(){
var element = this.toElement(),
listener = new Events,
removeEvent = listener.removeEvent;
listener.removeEvent = function(key, value){
element.removeEvent(key, value);
removeEvent.call(this, key, value);
};
this.$listener = listener;
};
this.Listener = new Class({
attach: function(key, value){
if (!this.$listener) setup.call(this);
this.$listener.addEvent(key, value);
this.toElement().addEvent(key, value);
}.overloadSetter(),
detach: function(object, value){
if (!this.$listener) return this;
if (object == null) this.$listener.removeEvents();
else if (typeof object != 'string') this.$listener.removeEvents(object);
else this.$listener.removeEvent(object, value);
return this;
},
toElement: function(){
return this.element;
}
});
}).call(this);
// Implementation
var MyClass = new Class({
Implements: [Listener, Class.Binds],
initialize: function(){
this.element = new Element('div');
this.attach({
click: this.bound('onClick'),
'keyup:relay(:input)': this.bound('onKeyUp')
});
}
});
// Use
var myInstance = new MyClass();
myInstance.detach();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment