一、事件的三种绑定方式

1、HTML/DHTML

在标签中直接增加属性触发事件

[javascript] view plaincopy
  1. <script type="text/javascript">
  2. function hello(){
  3. alert("hello word");
  4. }</script>
  5. <input type="button" id="btn1" value="第一种事件绑定" onClick="hello()">

2、DOM Ext.isIE判断是否是IE浏览器利用document对象获取元素对象并绑定事件

[javascript] view plaincopy
  1. if(Ext.isIE){
  2. document.getElementById("btn2").attachEvent("onclick",function(){
  3. alert("第二种事件绑定方式");
  4. });
  5. }else{
  6. document.getElementById("btn2").addEventListener("click",function(){
  7. alert("第二种事件绑定方式");
  8. });
  9. }

3、ExtJs  利用Ext中的get方式获取元素并调用on方法绑定事件,第一个参数传入为事件类型,第二个是动作

Ext.get("btn3").on("click",function(){

alert("第三种事件绑定方式");

});

二、Ext.util.Observable 事件的基类

概述:它为所有支持事件机制的extjs组件提供事件的支持,如果我们自己创建新的组件需要有事件的支持那么我们就得继承它

事件的分类:

标准事件:键盘按钮按下,鼠标的单机双击,滑过滑动

业务时间:当面盘首期的时候触发,当组件被销毁的时候触发,当每个对象的属性值不为空的时候触发

一个自定义事件的例子:

没有用到事件处理的场景

母亲为孩子饿不饿--->

<--孩子

饿了--->给一瓶牛奶

不饿--->不给

用到事件的场景

母亲给孩子一瓶牛奶-->

孩子拿到牛奶感觉饿了就喝

感觉不饿就不喝

角色功能分析

孩子:应该有自己能拿到牛奶判断饿不饿的方法,当母亲给他牛奶的时候调用这个方法

那么孩子就要有一个业务事件时刻监听着母亲什么时候给自己牛奶

母亲:调用孩子拿牛奶的方法,并且传入一瓶牛奶

代码实现:并测试事件拦截

  1. Ext.define("children",{
  2. extend:"Ext.util.Observable",
  3. //定义构造函数
  4. constructor:function(){
  5. this.state="hungry",
  6. this.setMilk=function(milk){
  7. //调用事件的动作
  8. this.fireEvent("hungry",milk);
  9. },
  10. //添加一个事件
  11. this.addEvents({"hungry":true}),
  12. //注册这个事件
  13. this.addListener("hungry",function(milk){
  14. if(this.state=="hungry"){
  15. this.drink(milk);
  16. }else{
  17. alert("我不饿");
  18. }
  19. }),
  20. //定义喝牛奶的方法
  21. this.drink=function(milk){
  22. alert("我喝掉了一瓶牛奶:"+milk);
  23. }
  24. }
  25. });
  26. var children=Ext.create("children",{});//本对象是牛奶过敏的对象
  27. //事件的拦截
  28. Ext.util.Observable.capture(children,function(eventName){
  29. if(eventName=="hungry"){
  30. alert("这个孩子对牛奶过敏,不能喝");
  31. return false;
  32. }else{
  33. return true;
  34. }
  35. });
  36. children.setMilk("三鹿牛奶");
  37. /*
  38. * 为对象添加一个事件addEvents-->事件的监听方式注册这个事件addListener-->触发这个事件的动作fireEvent
  39. * */

三、addManagedListener 受管制的监听

概述:它是由调用的组件管理的,当组件执行了销毁的命令的时候所有被组件管制的事件全部销毁

创建工具条,利用items属性添加三个按钮create delete 撤销删除按钮

利用button中的handler点击事件来执行动作。调用destroy方法撤销delete按钮(在HTML中的id用get方法获取,而在组件指定的id需要用getCmp方法来获取)

在delete按钮中添加受管理的组件的事件机制。addManagedListener方法来添加

参数:第一个指定的是组件   第二个是事件类型   第三个是此事件的动作

流程:点击create按钮指定动作。在点击撤销删除按钮的时候将delete按钮删除,并且它管理的事件全部销毁,这时点击create无效果

  1. var tbar=Ext.create("Ext.toolbar.Toolbar",{
  2. renderTo:Ext.getBody(),
  3. width:400,
  4. items:[
  5. {xtype:"button",id:"create",text:"create"},
  6. {xtype:"button",id:"delete",text:"delete"},
  7. {xtype:"button",text:"撤销删除按钮",handler:function(){
  8. var c=Ext.getCmp("delete");
  9. if(c){
  10. c.destroy();
  11. }
  12. }}
  13. ]
  14. });
  15. var deleteB=Ext.getCmp("delete");
  16. deleteB.addManagedListener(Ext.getCmp("create"),"click",function(){
  17. alert("添加操作");
  18. });

四、relayEvents 事件的分发和传播(控制实现事件在不同空间或对象对内的传播)

比如说孩子喝完三鹿去医院,老爸就要带他去医院

  1. //定义father类
  2. Ext.define("father",{
  3. extend:"Ext.util.Observable",
  4. constructor:function(config){
  5. this.listeners=config.listeners;
  6. this.superclass.constructor.call(this,config);
  7. }
  8. });
  9. var father=Ext.create("father",{});
  10. //将孩子的事件机制分发到自身中
  11. father.relayEvents(children,["hungry"]);
  12. //注册分发过来的事件监听
  13. father.on("hungry",function(){
  14. alert("送喝了三鹿牛奶的孩子去医院..");
  15. });
  16. children.setMilk("三鹿牛奶");

五、事件对象Ext.EventObject

概述:当你添加事件的时候会传入一个Ext.EventObject对象的参数,不是一个单例,

不能被直接new出来,他会存活在事件处理的函数中

  1. var c=Ext.get("btn4");
  2. c.on("click",function(e){
  3. alert(e);
  4. //获取单机的时候的坐标值  可以正确的获取到如果触发的事件一些参数
  5. alert(e.getPageX());
  6. });

六、事件管理器Ext.EventManager

概述:它可以更方便的为页面元素绑定事件处理函数,方法:addListener 为元素增减事件

Ext.EventManager.addListener("btn5","click",function(){

alert("通过事件管理器来进行事件注册监听");

});

ExtJs的事件机制Event(学员总结)的更多相关文章

  1. 锁机制(Lock) 信号量机制(Semaphore) 事件机制(Event)

    IPC  进程间通信(inter-Process Communicate) 锁机制(Lock) l = Lock() 开启一个锁机制(实例化)   一把锁配一个钥匙 l.acquire()  获得钥匙 ...

  2. Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G

    code&monkey   Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...

  3. Cocos2d-X3.0 刨根问底(七)----- 事件机制Event源码分析

    这一章,我们来分析Cocos2d-x 事件机制相关的源码, 根据Cocos2d-x的工程目录,我们可以找到所有关于事件的源码都存在放在下图所示的目录中. 从这个event_dispatcher目录中的 ...

  4. Ext JS学习第十七天 事件机制event(二)

    此文仅有继续学习笔记: 昨天说了三种邦定事件的方法,今天说一下自定义事件 假设现在又这样的情景一个自定义的事件 没有用到事件处理的场景        母亲问孩子和不饿->             ...

  5. 白鹭引擎 - 事件机制 ( Event, addEventListener, dispatchEvent )

    1, 自定义事件, MyEvent class MyEvent extends egret.Event { /** * 一般会定义一个 DATA 字段作为事件 * 绑定事件监听器时, 一般用 类.DA ...

  6. Ext JS学习第十六天 事件机制event(一)

    此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件,相信你一定不陌生, 基本事件是什么?就类似于click.keypress.focus. ...

  7. Atitit  数据库的事件机制--触发器与定时任务attilax总结

    Atitit  数据库的事件机制--触发器与定时任务attilax总结 1.1. 事件机制的图谱1 2. 触发器的类型2 3. 实现原理 After触发器 Vs Instead Of触发器2 3.1. ...

  8. PHP event 事件机制

    PHP event 事件机制   <?php /* * PHP 事件机制 */ class baseClass{ private $_e; public function __set($name ...

  9. Magento事件机制 - Magento Event/Observer

    为了扩展Magento的功能,我们可以重写Magento的代码,但因为代码只能被重写一次,所以当多个模块需要重写同一部分的代码时,就会引起冲突,好在Magento提供了另一种扩展功能的方法:事件机制, ...

随机推荐

  1. 搭建一个 简易的php版 todolist

    我记得以前使用 wunderlist 但是国外..后来用了半年. 挺方便的.但是.后来慢慢忘了这工具存在 缺少了todolist.效率折半.. so.我搭建了个简单的todolist.  :mytin ...

  2. BZOJ 1185 最小矩形覆盖

    Description Input Output Sample Input Sample Output HINT 其实这题就是一道旋转卡壳的裸题,但是我的精度萎了.直接上hzwer的代码吧... #i ...

  3. BZOJ 1025 游戏

    Description windy学会了一种游戏.对于1到N这N个数字,都有唯一且不同的1到N的数字与之对应.最开始windy把数字按顺序1,2,3,……,N写一排在纸上.然后再在这一排下面写上它们对 ...

  4. Unity3d 跑酷游戏 之Character Controller篇

    unity3d  Character Controller @by  广州小龙 做3D跑酷游戏,也慢慢的学习了一些东西,从开发过程中积累了一些小的知识点跟大家分享一下! 1. 这个Revert按钮的意 ...

  5. I2C转UART

    I2C转UART,51单片机普通IO口模拟I2C从机,解决UART不够的问题 /************************************************************ ...

  6. MySql的卸载问题

    windows下mysql的卸载: 彻底卸载Mysql的方法:   (1),先在服务(开始——>控制面板——>管理工具——>服务)里停掉MySQL的服务.打开控制面板-添加删除程序, ...

  7. linux新内核中关闭硬盘的DMA

    vortex86 SIS550 Minit-5250E瘦客户机,使用CF卡启动,显示不支持DMA. 搜索得新内核已基本不再使用ide=nodma参数了,查到这篇文章:“Debian下关闭CF卡的DMA ...

  8. 10个经典的Java面试题

    这里有10个经典的Java面试题,也为大家列出了答案.这是Java开发人员面试经常容易遇到的问题,相信你了解和掌握之后一定会有所提高.让我们一起来看看吧. 1.Java的HashMap是如何工作的? ...

  9. sql服务器内部参数使用详情(存储过程)

    exec sp_help;返回当前数据库中的所有存储过程.exec sp_help datebase.dbo.table名称 返回当前表中的所有对象.如字段名称等.这个吊exec sp_helpfil ...

  10. servelt乱码问题(tomcat服务端编码为ISO-8859-1)

    Post的编码决定机制: <meta http-equiv="Content-Type" content="text/html; charset=gb2312&qu ...