匿名イベント–超低結合


私が見たCustom Eventの例では、まずイベントタイプがあります.そして、購読者が興味のあるイベントを購読して、最後にイベントマネージャを通してイベントを発表します.このようなイベントモデルでは、まずイベントタイプが存在しなければならない.しかし、場合によっては、予約者がまだ存在しないイベントタイプを購読できるようにしたいです.この一時的に存在しないイベントは彼を匿名のイベントと呼ぶことができます.

//     
eventManager.events = {};
//@sEvent:     ,@sMethod:      ,            
eventManager.subscribe = function(sEvent, oSubscriber, sMethod) {
  //                       
  if (!eventManager.events[sEvent]) {
    eventManager.events[sEvent] = [];
  }
  eventManager.events[sEvent].push({subscriber: oSubscriber, method: sMethod});
};

eventManager.unsubscribe = function(sEvent, oSubscriber) {
  if (!eventManager.events[sEvent]) {
    return;
  }
  for (var i=eventManager.events[sEvent].length-1; i>=0; i--) {
    if (eventManager.events[sEvent][i].subscriber===oSubscriber) {
      eventManager.events[sEvent].splice(i,1);
    }
  }
};

eventManager.fire = function(sEvent) {
  if (!eventManager.events[sEvent]) {
    return;
  }
  for (var i=0; i<eventManager.events[sEvent].length; i++) {
    subscription = eventManager.events[sEvent][i];
    subscription.subscriber[subscription.method].apply(subscription.subscriber, arguments);
  }
};