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 这几个方法来处理自定义事件的订阅、退订以及触发等动作,而这几个就是观察者模式中的主要动作了。

标签:YUI,笔记,yahoo,JavaScript
0
投稿

猜你喜欢

  • python实现随机漫步方法和原理

    2023-06-26 19:32:02
  • python实现音乐下载的统计

    2021-07-07 20:08:54
  • 解决Jupyter因卸载重装导致的问题修复

    2023-09-30 18:22:31
  • 跟老齐学Python之集合(set)

    2023-02-11 00:51:31
  • SqlServer创建自动收缩事务日志任务的图文教程

    2024-01-23 23:44:40
  • Vue2.0实现1.0的搜索过滤器功能实例代码

    2024-05-09 10:40:30
  • ASP利用XMLHTTP实现表单提交以及cookies的发送的代码

    2011-04-15 10:37:00
  • 通过定位控制信息列表下往上的增加

    2008-06-30 14:27:00
  • 人工智能学习Pytorch教程Tensor基本操作示例详解

    2021-06-14 17:39:22
  • Python 列表(List)操作方法详解

    2023-06-15 10:10:04
  • JavaScript声明变量的这四兄弟(var、let、function、const)

    2024-05-09 15:03:05
  • webstorm中配置nodejs环境及npm的实例

    2024-05-11 10:16:09
  • 详解tensorflow实现迁移学习实例

    2022-02-06 01:43:22
  • Nodejs之TCP服务端与客户端聊天程序详解

    2024-05-03 15:55:48
  • Python 马氏距离求取函数详解

    2023-08-27 01:28:58
  • python 中os模块os.path.exists()的用法说明

    2022-04-30 01:22:26
  • OpenCV实现去除背景识别的方法总结

    2021-01-06 23:04:10
  • mysql查询本周内每天统计量按天展示的示例代码

    2024-01-22 07:05:01
  • Vue之使用mockjs生成模拟数据案例详解

    2024-05-29 22:24:40
  • windows下mysql 8.0.27 安装配置图文教程

    2024-01-24 00:26:57
  • asp之家 网络编程 m.aspxhome.com