热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Dojo学习笔记(8.dojo.event&dojo.event.topic&dojo.event.browser)

Dojo学习笔记(8.dojo.event&dojo.event.topic&dojo.event.browser)模块:dojo.event终于进入有名的dojo事件处理系统的学

Dojo学习笔记(8. dojo.event & dojo.event.topic & dojo.event.browser)

模块:dojo.event

终于进入有名的dojo事件处理系统的学习了,学习前建议读者先去补习一下AOP的相关知识

dojo.event.connect

绑定指定的方法到指定的对象的方法上

Usage Example:

简单绑定1

function doOnClick1()
{
 alert("Clicked!");
}
dojo.event.connect(dojo.byId("inputTest"),"onclick","doOnClick1");

简单绑定2

obj = { doOnClick2: function(){ alert("Clicked!");}}
dojo.event.connect(dojo.byId("inputTest"),"onclick",obj,"doOnClick2");

如果存在需要进行多个事件的绑定的时候,你就会看到dojo的方便之处了

obj2 = { doOnClick2: function(){alert("Clicked!");}}
dojo.event.connect(dojo.byId("inputTest"),"onclick",obj,"doOnClick2");
dojo.event.connect(dojo.byId("inputTest"),"onclick",obj2,"doOnClick2");

connect可以对任何对象的方法进行绑定,而不是只能针对DOM对象

dojo.event.connect(obj,"doOnclick2","doOnClick1"); //在调用obj.doOnclick2()后调用doOnClick1()

dojo.event.connectBefore

dojo.event.connect默认是后绑定,connectBefore则是早绑定,绑定的方法将在指定方法前执行,用法与connect一致

dojo.event.connectAround

Usage Example:

function aroundTest(invocation){
  //此处可以增加代码,比如检查参数(invocation.args)
  var result = invocation.proceed();
  //此处可以增加代码,比如修改结果(result)
  return result;
}
dojo.event.connectAround(dojo.byId("inputTest"),"onclick","aroundTest");

dojo.event.connectOnce
说起这个函数,还真的是让我想了半天,直觉上我就把它想象成executeOnce,结果测试的结果让我差点想不通
connectOnce就是指保证只绑定一次,来避免重复绑定会导致的重复执行的问题

dojo.event.disconnect

解除绑定,调用参数与connect一致,即可解除之前的绑定操作

dojo.event.log

在执行指定对象的指定方法后自动记录日志

Usage Example:

dojo.event.log(obj, "doOnClick"); //当调用obj.doOnClick时记录下日志"DEBUG:  ([object Object]).doOnClick : "

你也可以这样写:

dojo.event.log({srcObj: obj, srcFunc: "doOnClick"});

dojo.event.kwConnect

kwConnect可以做到更加灵活的绑定,比如可以设置延迟执行绑定

Usage Example:

dojo.event.kwConnect({
  srcObj: dojo.byId("inputTest"),
  srcFunc: "onclick",
  adviceObj: obj,
  adviceFunc: "doOnclick2",

  type: "before", //默认为"after",可选: "before", "around",注意:type是用来决定adviceFunc的行为的,如果为"around",则aroundFunc将失效
  aroundObj: null,
  aroundFunc: null, //如果指定了aroundFunc,则其将对adviceFunc进行拦截,但是当type为"around"时,则aroundFunc将不会执行
  once: false, //默认为false,允许重复绑定
  delay: 3000, //延时3秒后执行adviceFunc
  rate: 0, //这个从源代码没有看懂起什么作用
  adviceMsg: false //这个从源代码没有看懂起什么作用
});

dojo.event.kwDisconnect

用来解除使用kwConnect指定的绑定

模块:dojo.event.topic

Topic机制与Advice机制都能够实现事件的绑定,但是显然,Topic更适合处理多重绑定。
发布主题,然后由用户订阅的机制就是一个典型的观察者模式

dojo.event.topic.registerPublisher

注册主题发布器

Usage Example:

dojo.event.topic.registerPublisher("myTopic", obj, "doOnClick2");

dojo.event.topic.subscribe

订阅主题

Usage Example:

dojo.event.topic.subscribe("myTopic", "test"); //执行obj.doOnClick2()以后会自动执行test()

dojo.event.topic.unsubscribe

取消订阅主题

Usage Example:

dojo.event.topic.unsubscribe("myTopic", "test");

dojo.event.topic.destroy

删除主题,此主题所有的订阅都将失效

Usage Example:

dojo.event.topic.destroy("myTopic");

模块:dojo.event.browser

dojo.event.browser.addListener

增加监听器

Usage Example:

function listener()
{
  alert("ok");
}
dojo.event.browser.addListener(document, 'mousedown', listener); //事件名称可以加上"on",也可以没有"on"
dojo.event.browser.addListener(document, 'onmousedown', listener, true); //capture为真表示不受上层元素的事件控制

dojo.event.browser.removeListener

清除监听器(这个方法似乎是无效的)

dojo.event.browser.callListener

调用监听器

Usage Example:

dojo.event.browser.callListener(listener, document);

dojo.event.browser.stopPropagation

阻止Event传播

Usage Example:

dojo.event.browser.stopPropagation();

dojo.event.browser.preventDefault

将当前事件的返回值设置为false

Usage Example:

dojo.event.browser.preventDefault();

dojo.event.browser.keys

键定义:
  KEY_BACKSPACE: 8,
  KEY_TAB: 9,
  KEY_ENTER: 13,
  KEY_SHIFT: 16,
  KEY_CTRL: 17,
  KEY_ALT: 18,
  KEY_PAUSE: 19,
  KEY_CAPS_LOCK: 20,
  KEY_ESCAPE: 27,
  KEY_SPACE: 32,
  KEY_PAGE_UP: 33,
  KEY_PAGE_DOWN: 34,
  KEY_END: 35,
  KEY_HOME: 36,
  KEY_LEFT_ARROW: 37,
  KEY_UP_ARROW: 38,
  KEY_RIGHT_ARROW: 39,
  KEY_DOWN_ARROW: 40,
  KEY_INSERT: 45,
  KEY_DELETE: 46,
  KEY_LEFT_WINDOW: 91,
  KEY_RIGHT_WINDOW: 92,
  KEY_SELECT: 93,
  KEY_F1: 112,
  KEY_F2: 113,
  KEY_F3: 114,
  KEY_F4: 115,
  KEY_F5: 116,
  KEY_F6: 117,
  KEY_F7: 118,
  KEY_F8: 119,
  KEY_F9: 120,
  KEY_F10: 121,
  KEY_F11: 122,
  KEY_F12: 123,
  KEY_NUM_LOCK: 144,
  KEY_SCROLL_LOCK: 145

dojo.event.browser.currentEvent

最近一次的Event,其属性包括:

altKey  //检查alt键的状态,当alt键按下时,值为 true
button  //检查按下的鼠标键,0 没按键,1 按左键,2 按右键,3 按左右键,4 按中间键,5 按左键和中间键,6 按右键和中间键,7 按所有的键
  //这个属性仅用于onmousedown, onmouseup, 和 onmousemove 事件。对其他事件,不管鼠标状态如何,都返回 0(比如onclick)
clientX  //返回鼠标在窗口客户区域中的X坐标
clientY  //返回鼠标在窗口客户区域中的Y坐标
ctrlKey  //检查ctrl键的状态,当ctrl键按下时,值为 true
fromElement //检测 onmouseover 和 onmouseout 事件发生时,鼠标所离开的元素
keyCode  //检测键盘事件相对应的内码,仅当type为keydown,keyup,keypress时才有效
offsetX  //检查相对于触发事件的对象,鼠标位置的水平坐标
offsetY  //检查相对于触发事件的对象,鼠标位置的垂直坐标
propertyName //设置或返回元素的变化了的属性的名称,你可以通过使用 onpropertychange 事件,得到 propertyName 的值
screenX  //检测鼠标相对于用户屏幕的水平位置
screenY  //检测鼠标相对于用户屏幕的垂直位置
shiftKey //检查shift键的状态,当shift键按下时,值为true
srcElement //返回触发事件的元素
srcFilter //返回触发 onfilterchange 事件的滤镜
toElement //检测 onmouseover 和 onmouseout 事件发生时,鼠标所进入的元素
type  //返回没有“on”作为前缀的事件名,比如click, mousedown
x  //返回鼠标相对于css属性中有position属性的上级元素的x轴坐标。如果没有css属性中有position属性的上级元素,默认以BODY元素作为参考对象
y  //返回鼠标相对于css属性中有position属性的上级元素的y轴坐标。如果没有css属性中有position属性的上级元素,默认以BODY元素作为参考对象
target  //同srcElement
currentTarget
layerX  //同offsetX
layerY  //同offsetY
pageX  //无水平滚动条的情况下与clientX同
pageY  //无水平滚动条的情况下与clientY同
relatedTarget // 仅当type为mouseover,mouseout时才有效
keys  //与dojo.event.browser.keys相同,仅当type为keydown,keyup,keypress时才有效
charCode //键值,仅当type为keypress时才有效

dojo.event.browser.isEvent

判断指定对象是否为event对象

Usage Example:

dojo.event.browser.isEvent(dojo.event.browser.currentEvent); //当dojo.event.browser.currentEvent不为null时返回true



推荐阅读
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文主要复习了数据库的一些知识点,包括环境变量设置、表之间的引用关系等。同时介绍了一些常用的数据库命令及其使用方法,如创建数据库、查看已存在的数据库、切换数据库、创建表等操作。通过本文的学习,可以加深对数据库的理解和应用能力。 ... [详细]
  • Java学习笔记之使用反射+泛型构建通用DAO
    本文介绍了使用反射和泛型构建通用DAO的方法,通过减少代码冗余度来提高开发效率。通过示例说明了如何使用反射和泛型来实现对不同表的相同操作,从而避免重复编写相似的代码。该方法可以在Java学习中起到较大的帮助作用。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
author-avatar
keleisibuo
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有