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 这几个方法来处理自定义事件的订阅、退订以及触发等动作,而这几个就是观察者模式中的主要动作了。
猜你喜欢
- 一 MySQL WorkbenchMySQL Workbench提供DBAs和developers一个集成工具环境:1)数据库设计和建模2)
- 本文总结了input的各种使用方法,挺全面的1.取消按钮按下时的虚线框在input里添加属性值 hideFocus 或者 HideFocus
- 一般的网站会有很多页面,面包屑导航可以大大改善用户寻找他们的路径的方法。就可用性而言,面包屑可以减少一个网站的用户返回上一级页面的操作次数,
- 相对于 Ajax,服务端 XMLHTTP 就是在服务端使用 XMLHttpRequest 对象了。虽然说,在服务端使用异步请求是比较不方便的
- sql不常用函数总结以及事务,增加,删除触发器 distinct 删除重复行 declare @x 申明一个变量 convert(varch
- 1 数据库连接a.数据库的连接(ACCESS和SQL)在APS脚本中可以通过3中方式访问数据库: ∈IDC (Inte
- 在MySQL中,使用auto_increment类型的id字段作为表的主键,并用它作为其他表的外键,形成“主从表结构”,这是数据库设计中常见
- javascript 代码实现vbscript中的trim、left、right等函数兼容IE,FireFox。<style>b
- 1、使用索引来更快地遍历表。缺省情况下建立的索引是非群集索引,但有时它并不是最佳的。在非群集索引下,数据在物理上随机存放在数据页上。合理的索
- 一、'建立register.asp 代码如下:<%@ language=vbscript %>&nb
- 最近在这找了好久的js菜单,都没找到满意的,今天找了个,觉得不错,最重要的是简单,希望大家可以参照一下先看看效果图吧:代码特点:js+css
- 方法组成模式方法里的所有语句都必须处在同一个归纳层次上无用的注释让代码自我表白标注为什么这样,而不是如何这样对方法表现进行描述等于重复表现这
- 思想:4个数字的排列,加上3个运算符的排列,使用后缀表达式的表现如下:情形一:1,2,3,4,+,-,* => 24*24*4情形二:
- Macromedia StandardMacromedia Dreamweaver MXMenu Commandsphotoshop快捷键大
- LBound函数:返回指定数组维的最小可用下标;UBound函数:返回指定数组维的最小可用上标;LBound(arrayname, [,di
- server application error--IIS故障故障现象:Server Application Error The serve
- asp之家注:一个取图片尺寸的asp类,支持jpg,gif,png格式的图片文件;读取图片的尺寸其实很有用,当我们在设计一个新闻文章添加页面
- 问题作为一个负责几个服务器的数据库管理员,我接到许多电话是关于磁盘空间的。我所做的第一件事是找到可以缩小的数据文件来释放一些磁盘上的空间。我
- 准备软件:1. J2SDK(1.5.0): jdk-1_5_0-linux-i586-rpm.bin2. Apache(2.0.53): h
- 每个人都可以编写CSS代码,甚至你现在已经让它为你的项目工作了。但是CSS还可以更好吗?开始用这5个Tips改进你的CSS吧!一、关于CSS