Extjs4.0的事件機制

Extjs的事件機制

1. 事件的三種綁定方式

HTML/DHTML

DOM

EXTJS

事件綁定機制的總結地址:

http://www.uspcat.com/forum.php?mod=viewthread&tid=203&extra=page%3D1

第一種 在HTML中的原始的js腳本

<script type="text/javascript">

function hello(){

alert("第一種事件綁定機制");

}

</script>

<input type="button" id="btn1" value="第一種事件綁定機制" οnclick="hello()"/><br/>

第二種:在DOM下的事件機制

<input type="button" id="btn2" value="第二種事件綁定機制"/><br/>

(function(){

Ext.onReady(function(){

//DOM事件的兩種機制

if(Ext.isIE){

//適合在IE下運行的機制

document.getElementById("btn2").attachEvent("onclick",function(){

alert("第二種");

});

}else{

//適合於火狐瀏覽器下運行的

document.getElementById("btn2").addEventListener("click",function(){

alert("第二種");

});

}

});

})();

注:在IE瀏覽器下運行的是attachEvent,在火狐瀏覽器下運行的是addEventListener,DOM不能跨瀏覽器運行

第三種 在extjs下的事件機制

(function(){

Ext.onReady(function(){

//extjs的事件機制,是跨瀏覽器的

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

alert("333");

});

});

})();

Extjs的事件機制在哪個瀏覽器下都可以使用

2. Ext.util.Observable 事件的基類

它是爲所有支持事件機制的extjs組件提供事件的支持

如果我們自己創建新的組件要是有事件的支持,那麼我們就繼承它

事件的分類:

標準事件[鍵盤按鈕按下,鼠標的單擊事件,滑過滑動]

業務事件[當面板收起的時候觸發的事件,當組件被銷燬的時候觸發,當每一個對象的屬性值不爲空的時候觸發]

一個自定義的例子:

沒有用到事件處理的場景

母親問孩子餓不餓—--->

---à孩子

餓了 ---à給一瓶牛奶

不餓---à不給

用了事件的場景

母親給孩子一瓶牛奶----à

孩子拿到牛奶感覺餓了就喝

感覺不餓就不喝

角色功能分析

孩子:應該有自己能拿到牛奶判斷自己餓不餓的方法,當母親給他牛奶的時候調用這個方法

那麼孩子就要有一個業務事件時刻監聽着母親什麼時候給奶喝

母親:調用孩子拿牛奶的方法,並且傳入一瓶牛奶

例子爲:

(function(){

Ext.onReady(function(){

//舉例講解時間的基類 Ext.util.Obervable

//孩子類

Ext.define("children",{

extend:'Ext.util.Observable',

//構造函數

constructor:function(){

this.state = "hungry",//目前所屬的狀態

this.setMilk = function(milk){

//觸發這個事件的動作

this.fireEvent('hungry',milk);

},

this.addEvents({"hungry":true});//添加事件

this.addListener("hungry",function(milk){

if(this.state == 'hungry'){

this.drink(milk);

}else{

alert("我不渴");

}

});

this.drink = function(milk){

alert("我喝了一瓶牛奶"+milk);

}

},

});

var children = Ext.create("children",{});

//母親調用孩子的接受牛奶的方法

children.setMilk("爽歪歪");

});

/**

* 事件的步驟:

* (1)爲對象添加一個事件 this.addEvents

* (2)事件的監聽方式註冊這個事件 this.addListener

* (3)觸發了這個事件的動作 this.fireEvent

*/

})();

3. addManageListener 受管制的事件監聽

它是由調用的組件創建管理的,當組件執行了銷燬的命令的時候所有的被管制的組件都被銷燬

(function(){

Ext.onReady(function(){

//來介紹事件中addManageListener的作用,是用來管理其他組件的

//我們用到一個工具類來舉例

var tbar = Ext.create("Ext.toolbar.Toolbar",{

renderTo : Ext.getBody(),//意思是讓組件依附於哪裏

width:500,

//存放組件的數組

items:[

{xtype: 'button',id:'create', text : 'create' },

{xtype:'button',id:'delete', text:'delete'},

{xtype:'button',text:'destory',handler:function(){

var c = Ext.getCmp("delete");//

if(c){

c.destroy();

}

}

}

]

});

var deleteB = Ext.getCmp("delete");

deleteB.addManagedListener(Ext.getCmp("create"),'click',function(){

alert("添加操作");

});

//deleteB.addManagedListener的意思是( 管理的是誰,管理的事件是什麼事件,當執行管理的事件時的操作),就相當於是

//Ext.getcmp("create").on("click",function(){});

//Ext.getCmp("delete");方法獲取的是id

});

})();

4.relayEvents事件的分發和傳播(控制實現事件在不同空間或對象內傳播)

var children = Ext.create("children",{});

//父類沒有聲明過任何監聽事件

Ext.define("father",{

extend:'Ext.util.Observable',

constructor:function(config){

this.listeners = config.listeners;

this.superchlass.constructor.call(this,config);

}

});

var father = Ext.create("father",{});

father.relayEvents(children,['hungry']);//事件的分發和傳播

father.on('hungry',function(){

alert("送醫院")

});

5.事件對象 Ext.EventObject

Ext.onReady(function(){

//eventObject傳統的事件

var b = Ext.get("btn4").on("click",function(e){

alert(e.getPageX());

});

});

6.事件管理器 Ext.EventManager

它可以更方便的爲頁面元素綁定事件處理函數

Ext.onReady(function(){

//通過事件管理器註冊監聽

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

alert("adfsf");

})

});

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章