/**
* Created with JetBrains WebStorm.
* User: 宇乔
* Date: 13-8-2
* Time: 下午3:01
* To change this template use File | Settings | File Templates.
*/
function Event(name) {
var handlers = [];
this.getName = function () {
return name;
}
this.addHandler = function (handler) {
handlers.push(handler);
}
this.removeHandler = function (handler) {
handlers.forEach(function (item, i) {
if (item == handler) {
handler.splice(i, 1);
}
})
}
this.fire = function (eventArgs) {
handlers.forEach(function (h) {
h(eventArgs);
})
}
}
function EventAggregator() {
var events = [];
function getEvent(name) {
var fn;
events.forEach(function (item) {
if (item.getName() == name) {
fn = item;
return;
}
});
return fn;
}
this.subscribe = function (eventName, handler) {
var event = getEvent(eventName);
if (!event) {
event = new Event(eventName);
events.push(event);
}
event.addHandler(handler);
}
this.publish = function (eventName, eventArgs) {
var event = getEvent(eventName);
if (!event) {
event = new Event(eventName);
events.push(event);
}
event.fire(eventArgs);
}
}