ExtJS4學習筆記七--事件綁定相關

一、addListener方法 
Javascript代碼  收藏代碼
  1. var button = Ext.get('btn');  
  2. button.addListener('click',hello1);//綁定事件處理函數  
  3. button.addListener('click',hello2);  


二、ExtJS支持的自定義事件 
Javascript代碼  收藏代碼
  1. //創建Person類  
  2. var Person = Ext.extend(Ext.util.Observable,{  
  3.     constructor : function(name){  
  4.        this.name = name;  
  5.        this.sayNum = 0;  
  6.        this.say = function(){  
  7.             if(this.sayNum < 2){  
  8.                 this.sayNum += 1;  
  9.                 alert('I am '+name);  
  10.             }else{  
  11.                 this.sayNum = 0;//觸發自定義事件後計數器歸零  
  12.                 this.fireEvent('onSay',this);//激發自定義事件  
  13.             }  
  14.        }  
  15.        this.addEvents({//加入自定義事件  
  16.           "onSay" : true  
  17.        });  
  18.     }  
  19. });  
  20. var per = new Person('tom',3);//創建對象  
  21. //爲自定義事件綁定處理函數  
  22. per.addListener('onSay',function handler(){  
  23.     alert('發生了自定義事件');  
  24. });  
Html代碼  收藏代碼
  1. <input type='button' value='say' onclick='per.say()'>  

自定義事件的另外一個例子: 
Javascript代碼  收藏代碼
  1. //繼承自Ext.util.Observable  
  2. var Person = Ext.extend(Ext.util.Observable,{  
  3.     constructor : function(name){  
  4.        this.name = name;  
  5.        this.say = function(){  
  6.             this.fireEvent('onSay',this.name);//激發自定義事件  
  7.        }  
  8.        this.addEvents({//加入自定義事件  
  9.           "onSay" : true  
  10.        });  
  11.     }  
  12. });  
  13. var per = new Person('tom');//創建對象  
  14.   
  15. //爲自定義事件綁定處理函數  
  16. per.addListener('onSay',function(name){  
  17.     alert("I'am " + name);  
  18. });  

攔截器使用示例Observable.capture,與上面例子不同的地方是“var per = new Person('tom');//創建對象”代碼之後的內容替換爲: 
Javascript代碼  收藏代碼
  1. per.addListener('onSay',handler);//爲自定義事件綁定處理函數  
  2. function handler(){//事件處理函數  
  3.     alert('發生了自定義事件');  
  4. }  
  5. //爲per對象添加攔截器  
  6. Ext.util.Observable.capture(per,captureFunction);  
  7. //攔截函數  
  8. function captureFunction(eventName){  
  9.     if(eventName == 'onSay'){//事件名稱是onSay則返回false終止事件的執行  
  10.         alert("攔截事件:“"+eventName+"”。");  
  11.         return false;  
  12.     }  
  13.     return true;  
  14. }  


三、addManagedListener受管事件監聽器: 
Javascript代碼  收藏代碼
  1. function createFn(){  
  2.     alert('新建');  
  3. }  
  4. function openFn(){  
  5.     alert('打開');  
  6. }  
  7. function saveFn(){  
  8.     alert('保存');  
  9. }  
  10. Ext.create('Ext.toolbar.Toolbar',{//創建工具欄  
  11.     renderTo: Ext.getBody(),  
  12.     bodyPadding: 5,  
  13.     width:300,  
  14.     items : [  
  15.         {text:'新建',id:'createBtn',iconCls:'newIcon'},  
  16.         {text:'打開',id:'openBtn',iconCls:'openIcon'},  
  17.         {text:'保存',id:'saveBtn',iconCls:'saveIcon'},  
  18.         {text:'銷燬新建按鈕',handler : function(){  
  19.             //銷燬新建按鈕  
  20.             Ext.getCmp('createBtn').destroy();  
  21.         }}  
  22.     ]  
  23. });  
  24. var createBtn = Ext.getCmp('createBtn');  
  25. createBtn.on('click',createFn);  
  26. //以下的事件綁定將受createBtn組件是否銷燬的控制,如果createBtn組件銷燬  
  27. //了則事件綁定同時解除。  
  28. createBtn.addManagedListener(Ext.getCmp('openBtn'),'click',openFn);  
  29. createBtn.addManagedListener(Ext.getCmp('saveBtn'),'click',saveFn);  


四、relayEvents傳播分發事件: 
Javascript代碼  收藏代碼
  1. //創建Employee工人類  
  2. var Employee = Ext.extend(Ext.util.Observable,{  
  3.     constructor : function(config){  
  4.        this.name = config.name;  
  5.        this.eat = function(){  
  6.             this.fireEvent('startEat',this);//激發開始吃飯事件  
  7.             this.fireEvent('finishEat',this);//激發結束吃飯事件  
  8.        }  
  9.        this.addEvents({//加入自定義事件  
  10.           "startEat" : true,//開始吃飯事件  
  11.           "finishEat" : true//結束吃飯事件  
  12.        });  
  13.        Employee.superclass.constructor.call(this, config)  
  14.     }  
  15. });  
  16.   
  17. //定義Waiter服務員類  
  18. var Waiter = Ext.extend(Ext.util.Observable,{  
  19.     constructor : function(config){  
  20.         Waiter.superclass.constructor.call(this, config);  
  21.     }  
  22. });  
  23. //創建員工對象  
  24. var emp = new Employee({name:'tom'});  
  25. //爲自定義事件綁定處理函數  
  26. emp.addListener('startEat',function(){  
  27.     alert(this.name + '開始吃飯了。');  
  28. });  
  29. emp.addListener('finishEat',function (){  
  30.     alert(this.name + '吃完飯,可以收拾盤子了。');  
  31. });  
  32. //創建服務員對象  
  33. var waiter = new Waiter();  
  34. //使服務員對象與員工對象的finishEat事件進行關聯  
  35. //也就是說當員工對象的finishEat事件發生後,先執行自身的事件監聽器,  
  36. //然後事件會傳遞到服務員對象中,激發服務員對象的finishEat事件。  
  37. waiter.relayEvents(emp, ['finishEat']);  
  38. waiter.on('finishEat',function(){  
  39.     alert('服務員開始收拾盤子。');  
  40. });  
Html代碼  收藏代碼
  1. <input type='button' value='員工吃飯' onclick='emp.eat()'>  


五、Ext.EventObject示例 
Javascript代碼  收藏代碼
  1. var btn = Ext.get('buttonTest');  
  2. btn.addListener('click',handler);//爲click事件綁定處理函數  
  3. function handler(e){//事件處理函數  
  4.     //獲取事件發生時的x座標  
  5.     var x = e.getPageX();  
  6.     //獲取事件發生時的y座標  
  7.     var y = e.getPageY();  
  8.     var msg = '事件發生座標 : x='+x+' y='+y;  
  9.     alert(Ext.EventManager.getPageXY(e));  
  10.     alert(msg);  
  11. }  


六、Ext.EventManager使用 
Javascript代碼  收藏代碼
  1. Ext.EventManager.addListener('btn','click',handler);//綁定處理函數  
發佈了8 篇原創文章 · 獲贊 18 · 訪問量 47萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章