Skip to content

Instantly share code, notes, and snippets.

@krasimir
Created November 27, 2013 08:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save krasimir/7672201 to your computer and use it in GitHub Desktop.
Save krasimir/7672201 to your computer and use it in GitHub Desktop.
A simple class for managing events.
var Dispatcher = function(componentName) {
var listeners = [];
return {
on: function(eventName, callback) {
if(!listeners[eventName]) {
listeners[eventName] = [];
}
listeners[eventName].push(callback);
return this;
},
off: function(eventName, handler) {
if(!listeners[eventName]) return this;
if(!handler) listeners[eventName] = []; return this;
var newArr = [];
for(var i=0; i<listeners[eventName].length; i++) {
if(listeners[eventName][i] !== handler) {
newArr.push(listeners[eventName][i]);
}
}
listeners[eventName] = newArr;
return this;
},
dispatch: function(eventName, data) {
console.log("%c" + componentName + ": " + eventName, "color: #29A0D3;");
if(listeners[eventName]) {
for(var i=0; i<listeners[eventName].length; i++) {
var callback = listeners[eventName][i];
callback(data);
}
}
return this;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment