// Element Listener Mixin | |
(function(){ | |
var setup = function(element){ | |
var listener = new Events, removeEvent = listener.removeEvent; | |
listener.removeEvent = function(key, value){ | |
removeEvent(key, value); | |
element.removeEvent(key, value); | |
}; | |
return listener; | |
}; | |
this.Listener = new Class({ | |
attach: function(key, value){ | |
if (!this.$listener) this.$listener = setup(this.toElement()); | |
this.$listener.addEvent(key, value); | |
this.toElement().addEvent(key, value); | |
}.overloadSetter(), | |
detach: function(key, value){ | |
if (this.$listener){ | |
if (typeof key == 'string') this.$listener.removeEvent(key, value); | |
else this.$listener.removeEvents(key); | |
} | |
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