Skip to content

Instantly share code, notes, and snippets.

@odesskij
Last active August 29, 2015 14:24
Show Gist options
  • Save odesskij/b18bbdce73a63472b488 to your computer and use it in GitHub Desktop.
Save odesskij/b18bbdce73a63472b488 to your computer and use it in GitHub Desktop.
class Events
constructor: () ->
@events = {}
trigger: (event, args...) ->
if @events[event]?
e = @events[event]
for h in e.handlers
h.callback.apply h.context, args
return;
on: (event, callback, context) ->
e = if @events[event]? then @events[event] else @events[event] = {handlers: []}
e.handlers.push {callback, context}
###
Tests
###
object = new Events
object.on 'event', (args...) ->
s = 0
for i in args
s += i
console.log s
object.trigger 'event', 1, 2, 3, 4
for i in [0..3]
do (i) -> object.on 'eventTwo', () ->
console.log "event #{i}"
object.trigger 'eventTwo'
object.on 'eventThree', (() -> console.log "random #{do @random}"), Math
object.trigger 'eventThree'
var object = {
"_events": {},
"trigger": function (event) {
if (!this._events.hasOwnProperty(event)) {
return;
}
var e = this._events[event];
var args = [];
for (var i = 1; i < arguments.length; i++) {
args.push(arguments[i]);
}
for (var entry in e.callbacks) {
if (e.callbacks.hasOwnProperty(entry)) {
var c = e.callbacks[entry];
c.f.apply(c.c, args);
}
}
},
"on": function (event, callback, context) {
var e = this._events.hasOwnProperty(event) ?
this._events[event] :
this._events[event] = {"callbacks": []};
e.callbacks.push({
"f": callback,
"c": context
});
}
};
object.on('event', function () {
var s = 0;
for (var i = 0; i < arguments.length; i++) {
s += arguments[i];
}
console.log(s);
});
object.trigger('event', 1, 2, 3, 4); // => 10
for (var i = 0; i < 3; i++) {
(function (index) {
object.on('eventTwo', function () {
console.log('event => ' + index);
});
})(i);
}
object.trigger('eventTwo');
object.on('eventThree', function () {
console.log('random ' + this.random());
}, Math);
object.trigger('eventThree');
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment