1.事件的3种绑定方式

    HTML/DHTML
    DOM
    EXTJS
2.Ext.util.Observable 事件的基类
    它为所有支持事件机制的extjs组件提供事件的支持
    如果我们自己创建新的组件需要有事件的支持那么我们就继承它
    事件的分类
       标准事件[键盘按钮按下,鼠标的单击双击,滑过滑动]
       业务事件[当面板收起的时候触发,当组件被销毁的时候触发,当每一个对象的属性值不为空的时候触发]
     一个自定义事件的例子
           没有用到事件处理的场景
               母亲问孩子饿不饿--->
                               <----孩子
                                    饿了-->给一瓶牛奶
                                    不饿-->不给
           用了事件的场景
               母亲给孩子一瓶牛奶-->
                                   孩子拿到牛奶感觉饿了就喝
                                   感觉不饿就不喝
           角色功能分析:
                  孩子:应该有自己能拿到牛奶判断饿不饿的方法,当母亲给他牛奶的时候调用这个方法。
                  那么孩子就要有一个业务事件时刻监听母亲什么时候给自己牛奶
                  母亲:调用孩子拿牛奶的方法,并且传入一瓶牛奶
3.addManagedListener 收管制的监听
      它是由调用的组件管理的,当组件执行了销毁命令的时候所有被组件管制的事件全部销毁
4.relayEvents 事件的分发和传播(控制实现事件在不同控件或对象的传播)
   比如孩子喝完三鹿就去医院,老爸就要带着去医院
5.事件对象Ext.EventObject
   不是一个单例,不能被直接new出来,它会存活在事件处理函数中
6.事件管理器Ext.EventManager
   它可以更方便地为页面元素绑定事件处理函数
   方法:addListener 为元素增减事件
---------------------------------------------------------------------------------------
这个例子主要讲第一种事件绑定方式
lesson7.html
 
  
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
  2. <html> 
  3. <head> 
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
  5. <title>事件</title> 
  6. <link rel="stylesheet" type="text/css" href="../extjs-4.1.0/resources/css/ext-all.css"/> 
  7. <script type="text/javascript" src="../extjs-4.1.0/bootstrap.js"></script> 
  8. <script type="text/javascript"> 
  9. function hello(){ 
  10.     console.log('hello world'); 
  11. </script> 
  12. </head> 
  13. <body> 
  14. <input type="button" id="btn1" value="第一种事件绑定方式" onClick="hello()"/> 
  15. </body> 
  16. </html> 

运行结果如下(点击界面的按钮之后):
 
hello world
---------------------------------------------------------------------------------------
这个例子主要讲IE下的事件绑定方式
evemntBinding.js
 
  
  1. (function(){ 
  2.     Ext.onReady(function(){ 
  3.     document.getElementById("btn1").attachEvent("onclick",function(){ 
  4.        alert("第二种事件绑定方式"); 
  5.         }); 
  6.     }); 
  7. })(); 
lesson7_2.html

 

 
       
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
  2. <html> 
  3. <head> 
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
  5. <title>事件</title> 
  6. <link rel="stylesheet" type="text/css" href="../extjs-4.1.0/resources/css/ext-all.css"/> 
  7. <script type="text/javascript" src="../extjs-4.1.0/bootstrap.js"></script> 
  8. <script type="text/javascript" src="evemntBinding.js"></script> 
  9. </head> 
  10. <body> 
  11. <input type="button" id="btn1" name="btn1" value="第二种事件绑定方式"/> 
  12. </body> 
  13. </html> 
运行结果如下:
弹出:“第二种事件绑定方式“
------------------------------------------------------------------------------------
这个例子主要讲FIREFORX,chrome下的事件绑定方式
evemntBinding2.js
 
 
  
  1. (function(){ 
  2.     Ext.onReady(function(){ 
  3.     document.getElementById("btn1").addEventListener("click",function(){ 
  4.        console.log("第二种事件绑定方式"); 
  5.         }); 
  6.     }); 
  7. })(); 
lesson7_3.html
 
 
  
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
  2. <html> 
  3. <head> 
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
  5. <title>事件</title> 
  6. <link rel="stylesheet" type="text/css" href="../extjs-4.1.0/resources/css/ext-all.css"/> 
  7. <script type="text/javascript" src="../extjs-4.1.0/bootstrap.js"></script> 
  8. <script type="text/javascript" src="evemntBinding2.js"></script> 
  9. </head> 
  10. <body> 
  11. <input type="button" id="btn1" name="btn1" value="第二种事件绑定方式"/> 
  12. </body> 
  13. </html> 
运行结果如下:
 
第二种事件绑定方式
-------------------------------------------------------------------------------------
这个例子主要讲Ext.isIE
evemntBinding3.js
 

 

 
       
  1. (function(){ 
  2.     Ext.onReady(function(){ 
  3.         if(!Ext.isIE){ 
  4.         document.getElementById("btn1").addEventListener("click",function(){ 
  5.            console.log("第二种事件绑定方式"); 
  6.             }); 
  7.         }else
  8.         document.getElementById("btn1").attachEvent("onclick",function(){ 
  9.         alert("第二种事件绑定方式"); 
  10.             }); 
  11.         } 
  12.     }); 
  13. })(); 
lesson7_3.html
 
 
  
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
  2. <html> 
  3. <head> 
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
  5. <title>事件</title> 
  6. <link rel="stylesheet" type="text/css" href="../extjs-4.1.0/resources/css/ext-all.css"/> 
  7. <script type="text/javascript" src="../extjs-4.1.0/bootstrap.js"></script> 
  8. <script type="text/javascript" src="evemntBinding3.js"></script> 
  9. </head> 
  10. <body> 
  11. <input type="button" id="btn1" name="btn1" value="第二种事件绑定方式"/> 
  12. </body> 
  13. </html> 
运行结果如下:
 
第二种事件绑定方式
---------------------------------------------------------------------------------------这个例子主要讲第三中绑定事件的方式
evemntBinding4.js
 
  
  1. (function(){ 
  2.     Ext.onReady(function(){ 
  3.     Ext.get('btn1').on("click",function(){ 
  4.       alert("第三种事件绑定方式"); 
  5.         }); 
  6.     }); 
  7. })(); 
lesson7_4.html
 
  
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
  2. <html> 
  3. <head> 
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
  5. <title>事件</title> 
  6. <link rel="stylesheet" type="text/css" href="../extjs-4.1.0/resources/css/ext-all.css"/> 
  7. <script type="text/javascript" src="../extjs-4.1.0/bootstrap.js"></script> 
  8. <script type="text/javascript" src="evemntBinding4.js"></script> 
  9. </head> 
  10. <body> 
  11. <input type="button" id="btn1" name="btn1" value="第三种事件绑定方式"/> 
  12. </body> 
  13. </html> 
运行结果:
弹出如下内容:
第三种事件绑定方式
-----------------------------------------------------------------------------------
这个例子主要讲Ext.util.Observable和其中的addListener和fireEvent
customEvent.js
 
  
  1. (function(){ 
  2.     Ext.onReady(function(){ 
  3.     Ext.define("children",{ 
  4.         extend:'Ext.util.Observable'
  5.             constructor:function(){ 
  6.          this.callParent(arguments);//课程中没有这句话,如果没有的话是会报错误
  7.          this.state = "hungry",//目前所属的状态 hungry full 
  8.              this.setMilk = function(milk){ 
  9.             this.fireEvent('hungry',milk); 
  10.               }, 
  11.              this.addListener("hungry",function(milk){ 
  12.             if(this.state == 'hungry'){ 
  13.                this.drink(milk); 
  14.             }else
  15.                console.log("我不饿"); 
  16.            } 
  17.             }), 
  18.                 this.drink = function(milk){ 
  19.            console.log("我喝掉了一瓶牛奶: " + milk); 
  20.                 } 
  21.             } 
  22.         }); 
  23.         var children = Ext.create("children",{}); 
  24.        //母亲调用孩子的接受牛奶的方法 
  25.      children.setMilk('三鹿牛奶'); 
  26.     }); 
  27.     /** 
  28.      * 为对象添加一个事件addEvents-->事件的监听方式注册这个事件addListener-->触发这个事件的动作fireEvent 
  29.      */ 
  30. })(); 
运行结果如下:
 
我喝掉了一瓶牛奶: 三鹿牛奶
-----------------------------------------------------------------------------
这个例子主要讲Ext.util.Observable.capture方法,即事件的捕获,拦截掉孩子对这个事件的执行
customEvent2.js
 
  
  1. (function(){ 
  2.     Ext.onReady(function(){ 
  3.     Ext.define("children",{ 
  4.         extend:'Ext.util.Observable'
  5.             constructor:function(){ 
  6.          this.callParent(arguments);//课程中没有这句话,如果没有的话是会报错误: 
  7.          this.state = "hungry",//目前所属的状态 hungry full 
  8.                this.setMilk = function(milk){ 
  9.             this.fireEvent('hungry',milk); 
  10.                 }, 
  11.              this.addListener("hungry",function(milk){ 
  12.             if(this.state == 'hungry'){ 
  13.                this.drink(milk); 
  14.             }else
  15.                console.log("我不饿"); 
  16.            } 
  17.             }), 
  18.                 this.drink = function(milk){ 
  19.            console.log("我喝掉了一瓶牛奶: " + milk); 
  20.                 } 
  21.             } 
  22.         }); 
  23.         var children = Ext.create("children",{});//本对象是牛奶过敏的对象 
  24.         Ext.util.Observable.capture(children,function(eventName){ 
  25.         if(eventName == "hungry"){ 
  26.            console.log("这个孩子牛奶过敏不能喝牛奶..."); 
  27.                return false
  28.         }else
  29.            return true
  30.         } 
  31.     }); 
  32.       //母亲调用孩子的接受牛奶的方法 
  33.     children.setMilk('三鹿牛奶'); 
  34.     }); 
  35. })(); 
运行结果如下:
 
这个孩子牛奶过敏不能喝牛奶...
-------------------------------------------------------------------------------------
这个例子主要讲事件分发relayEvents
relayEvent.js
 
  
  1. (function(){ 
  2.     Ext.onReady(function(){ 
  3.      Ext.define("children",{ 
  4.         extend:'Ext.util.Observable'
  5.             constructor:function(){ 
  6.          this.callParent(arguments);//课程中没有这句话,如果没有的话是会报错误: 
  7.          this.state = "hungry",//目前所属的状态 hungry full 
  8.                this.setMilk = function(milk){ 
  9.             this.fireEvent('hungry',milk); 
  10.                 }, 
  11.              this.addListener("hungry",function(milk){ 
  12.             if(this.state == 'hungry'){ 
  13.                this.drink(milk); 
  14.             }else
  15.                console.log("我不饿"); 
  16.            } 
  17.              }), 
  18.              this.drink = function(milk){ 
  19.            console.log("我喝掉了一瓶牛奶: " + milk); 
  20.              } 
  21.          } 
  22.      }); 
  23.         var children = Ext.create("children",{}); 
  24.          
  25.         //父类没有声明过任何监听事件 
  26.         Ext.define("father",{ 
  27.         extend:'Ext.util.Observable'
  28.            constructor:function(config){ 
  29.          this.listeners = config.listeners; 
  30.                 this.superclass.constructor.call(this,config); 
  31.            } 
  32.          }); 
  33.          var father = Ext.create("father",{}); 
  34.       father.relayEvents(children,['hungry']);//事件从孩子这端执行完就留到父亲 
  35.          father.on("hungry",function(){ 
  36.         console.log("送喝了三鹿的孩子去医院..");  
  37.          }); 
  38.          var father = Ext.create("father",{}); 
  39.        //母亲调用孩子的接受牛奶的方法 
  40.      children.setMilk('三鹿牛奶'); 
  41.     }); 
  42. })(); 
运行结果:
 

我喝掉了一瓶牛奶: 三鹿牛奶

 

送喝了三鹿的孩子去医院..

 

------------------------------------------------------------------------------
这个例子主要讲addManagedListener
manageListener.js
 
  
  1. (function(){ 
  2.     Ext.onReady(function(){ 
  3.     var tbar = Ext.create("Ext.toolbar.Toolbar",{ 
  4.         renderTo:Ext.getBody(), 
  5.             width:500, 
  6.             items:[ 
  7.          {xtype:'button',id:'create',text:'create'}, 
  8.          {xtype:'button',id:'delete',text:'delete'}, 
  9.          {xtype:'button',text:'销毁删除按钮',handler:function(){ 
  10.             var c = Ext.getCmp("delete");//不是页面上的元素的按钮 
  11.                     if(c){ 
  12.                        c.destroy(); 
  13.                     } 
  14.          }} 
  15.             ] 
  16.     }); 
  17.         var deleteB = Ext.getCmp("delete"); 
  18.         //删除了delete按钮之后,create按钮的事件也删除了 
  19.         deleteB.addManagedListener(Ext.getCmp("create"),'click',function(){ 
  20.          console.log("添加操作"); 
  21.         }); 
  22.      }); 
  23. })(); 
-------------------------------------------------------------------------------------
这个例子主要讲事件对象
EventObject.js
 
  
  1. Ext.onReady(function(){ 
  2.    var b = Ext.get("btn");//Ext.get获取DOM中元素 
  3.    b.on("click",function(e){ 
  4.        console.log(e); 
  5.        console.log(e.getPageX()); 
  6.     }); 
  7. }); 
lesson7EventObject.html
 
  
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
  2. <html> 
  3. <head> 
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
  5. <title>事件</title> 
  6. <link rel="stylesheet" type="text/css" href="../extjs-4.1.0/resources/css/ext-all.css"/> 
  7. <script type="text/javascript" src="../extjs-4.1.0/bootstrap.js"></script> 
  8. <script type="text/javascript" src="EventObject.js"></script> 
  9. </head> 
  10. <body> 
  11. <input type="button" id="btn" value="按钮"/> 
  12. </body> 
  13. </html> 
运行结果如下:
 

constructor {browserEvent: MouseEvent, type: "click", button: 0, shiftKey: false, ctrlKey: false…}

1

 
------------------------------------------------------------------------------
这个例子主要讲Ext.EventManager.addListener
eventmanager.js
 
  
  1. Ext.onReady(function(){ 
  2.     Ext.EventManager.addListener("btn",'click',function(){ 
  3.     console.log("通过事件管理器进行事件的监听注册"); 
  4.     }); 
  5.      
  6. }); 
lesson7EventManager.html
 
  
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
  2. <html> 
  3. <head> 
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
  5. <title>事件</title> 
  6. <link rel="stylesheet" type="text/css" href="../extjs-4.1.0/resources/css/ext-all.css"/> 
  7. <script type="text/javascript" src="../extjs-4.1.0/bootstrap.js"></script> 
  8. <script type="text/javascript" src="eventmanager.js"></script> 
  9. </head> 
  10. <body> 
  11. <input type="button" id="btn" value="按钮"/> 
  12. </body> 
  13. </html> 
运行结果:
 
通过事件管理器进行事件的监听注册
111111