匿名事件 – 超低耦合
在我所见过的 Custom Event 例子中,总是会先有一个事件类型,然后会有订阅者订阅其感兴趣的不同事件,最后通过事件管理器发布事件。在这种事件模型里,必须首先存在一个事件类型。但是在有的情况下,我们想要订阅者能够订阅一个还不存在的事件类型。这个暂时还不存在的事件我们可以叫他匿名事件.下面来看一段实现匿名事件的代码:
//事件管理器eventManager.events = {};//@sEvent: 事件类型,@sMethod:当事件发生时,要调用的订阅者的一个方法eventManager.subscribe = function(sEvent, oSubscriber, sMethod) {//如果该事件还不存在就创建一个这种类型事件的数组if (!eventManager.events) { eventManager.events = [];}eventManager.events.push({subscriber: oSubscriber, method: sMethod});};eventManager.unsubscribe = function(sEvent, oSubscriber) {if (!eventManager.events) { return;}for (var i=eventManager.events.length-1; i>=0; i--) { if (eventManager.events.subscriber===oSubscriber) { eventManager.events.splice(i,1); }}};eventManager.fire = function(sEvent) {if (!eventManager.events) { return;}for (var i=0; i<eventManager.events.length; i++) { subscription = eventManager.events; subscription.subscriber.apply(subscription.subscriber, arguments);}};
页:
[1]