YUI学习笔记(4)
作者:xujiwei 来源:HotHeart's BLOG 时间:2009-03-10 18:25:00
YAHOO.util.Subscriber 与 YAHOO.util.CustomEvent。
1. YAHOO.util.Subscriber (event.js)
这应该算是设计模式中的观察者模式了,Subscriber 订阅一个事件,在 Publisher 触发那个事件后,会逐个通知 Subscriber。
对于一般开发者来说,并不需要去关心 Subscriber 的实现,因为 Subscriber 主要是 CustomEvent 用来分发动作以及删除 Subscriber 的。
Subscriber 类只定义了 3 个属性:fn、obj 以及 override,3 个方法:getScope、contains、toString,其中 fn 为订阅者的回调函数,obj 为要传递给回调函数的一个额外参数,override 如果是布尔型的 true 值,那么表示使用 obj 属性为回调函数执行时的上下文,或者直接使用一个对象来作为回调函数执行的上下文。
Subscriber 的 3 个方法中比较有用的是 getScope 和 contains,toString 只是简单的将 Subscriber 对象转换成一个字符串。getScope 会根据 Subscriber 对象的 override 属性来获取回调函数执行的上下文,contains 用来判断 Subscriber 对象与指定的回调函数和 obj 是否一致。
2. YAHOO.util.CustomEvent (event.js)
CustomEvent 的作用相当在观察者模式中发布者的身份,可以通过它来实现一个自己的事件发布者。
CustomEvent 构造函数的定义如下:
CustomEvent = function(type, oScope, silent, signature)
在创建 CustomEvent 对象时,几个参数的用途如下:
type 是自定义事件的名称,在使用回调函数的参数格式为 YAHOO.util.Event.LIST 时,回调函数的第一个参数就是 CustomEvent 对象的名称;
oScope 是执行回调函数时的上下文对象,也就是在回调函数中可以用 this 来引用这个对象;
silent 参数是用指示是否在 YUI 为 debug 版本时禁用调试信息;
signature 用来指示回调函数参数的格式,可以为 YAHOO.util.Event.FLAT 或 YAHOO.util.Event.LIST,默认是 YAHOO.util.Event.LIST。
在使用 CustomEvent 之前,先要了解一下 CustomEvent 中回调函数参数的格式,CustomEvent 的回调函数可以有两种格式,一种为 YAHOO.util.Event.LIST,这种格式的回调函数具有三个参数,分别是事件名称、参数数组和附加对象参数;另外一种回调函数参数格式为 YAHOO.util.Event.FLAT,这个时候回调函数只有两个参数,一个为 CustomEvent 对象调用 fire 方法时的第一个参数,另外一个是订阅时的额外对象参数。
在创建 CustomEvent 对象时,CustomEvent 构造函数还会首先创建一个内部的自定义事件,用来处理该自定义事件被订阅的事件,这在 EventProvider 中用到,这里暂且不提。
CustomEvent 对象使用一个名为 subscribers 的数组来保存所有订阅者的列表,并且通过维护这个列表来维护该自定义事件的订阅者。
CustomEvent 对象提供了 subscribe、unsubscribe、unsubscribeAll、fire 这几个方法来处理自定义事件的订阅、退订以及触发等动作,而这几个就是观察者模式中的主要动作了。