Skip to content

Instantly share code, notes, and snippets.

@ryanflorence
Created April 14, 2012 05:46
Show Gist options
  • Save ryanflorence/2382307 to your computer and use it in GitHub Desktop.
Save ryanflorence/2382307 to your computer and use it in GitHub Desktop.
@events =
events: {}
on: (topic, handler, context = this) ->
(@events[topic] or= []).push {handler, context}
trigger: (topic, args...) ->
return unless @events[topic]?
handler.apply(context, args) for {handler, context} in @events[topic]
(function() {
var slice = Array.prototype.slice;
this.events = {
events: {},
on: function (topic, handler, context) {
if (context == null) context = this;
this.events[topic] = this.events[topic] || []
this.events[topic].push({ handler: handler, context: context });
},
trigger: function (topic) {
if (this.events[topic] == null) return;
var args = slice.apply(arguments, 1);
for (var i = 0, l = this.events[topic].length, event; i < l; i++) {
event = this.events[topic][i];
event.handler.apply(event.context, args);
}
}
};
}).call(this);
@ryanflorence
Copy link
Author

Yeah, I'm well aware of implicit returns guys; I'd return this if I cared, but don't :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment