Created
June 8, 2010 20:50
-
-
Save dandean/430635 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| var Evented = (function() { | |
| var id = -1; | |
| function uid() { | |
| id++; | |
| return "evented" + id; | |
| } | |
| function getID(obj) { | |
| if (!("__eventedID" in obj)) { | |
| obj.__eventedID = uid(); | |
| } | |
| return obj.__eventedID; | |
| } | |
| /** | |
| * Evented#on(obj, name, handler) -> Event.Handler | |
| * - obj(Evented): An object which has [Evented] api methods. | |
| * - name(String): The event name to watch. | |
| * - handler(Function): The event handler | |
| **/ | |
| function on(obj, name, handler) { | |
| return document.on(getID(obj) + ":" + name, handler); | |
| } | |
| function observe(obj, name, handler) { | |
| document.observe(getID(obj) + ":" + name, handler); | |
| return this; | |
| } | |
| function stopObserving(obj, name, handler) { | |
| if (!obj) { throw new Error("Argument `obj` is required."); }; | |
| if (!name) { throw new Error("Argument `name` is required."); }; | |
| document.stopObserving(getID(obj) + ":" + name, handler); | |
| return this; | |
| } | |
| /** | |
| * Evented#fire(name, handler) -> Evented | |
| * - name(String): The event name to fire. | |
| * - memo(Object): Event data to pass to the handler. It will have a `source` property | |
| * set to the [Evented] object which fired the event. | |
| **/ | |
| function fire(name, memo) { | |
| memo = memo || {}; | |
| memo.source = this; | |
| document.fire(getID(this) + ":" + name, memo); | |
| return this; | |
| } | |
| var api = { | |
| observe: observe, | |
| stopObserving: stopObserving, | |
| fire: fire | |
| }; | |
| if ("Handler" in Event) { | |
| api.on = on; | |
| } | |
| return api; | |
| })(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
MooTools has a really simple one I like. You can use it as a mixin.
You can simplify it a bit more, remove some of the fluff, and Prototypify the method names, but I dig it.