ExtJs事件機(jī)制基本代碼模型和流程解析
該程序的效果:點(diǎn)擊輸入按鈕,彈出一個(gè)腳本提示輸入框讓用戶(hù)輸入他的姓名,確定后,用戶(hù)錄入的姓名會(huì)顯示在頁(yè)面的姓名文本框中,并且頁(yè)面標(biāo)題變成和姓名一致,接著再?gòu)棾瞿_本提示輸入框讓用戶(hù)輸入性別,錄入完畢并點(diǎn)擊確定后,用戶(hù)錄入的性別將會(huì)顯示在頁(yè)面的性別文本框里。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<link rel="stylesheet" type="text/css" href="ext-all.css" />
<title>事件</title>
<script type="text/javascript" src="/adapter/ext/ext-base.js">
</script>
<script type="text/javascript" src="/ext-all.js">
</script>
<script type="text/javascript" src="Person.js">
</script>
<script type="text/javascript">
var _person = null ;
//按鈕點(diǎn)擊后觸發(fā)
button_click = function(){
_person.setName(prompt("請(qǐng)輸入姓名:" , "")) ;
_person.setSex(prompt("請(qǐng)輸入性別:" , "")) ;
}
//頁(yè)面加載完進(jìn)行的處理
Ext.onReady(function(){
//獲取控件對(duì)象
var txt_name = Ext.get("txt_name") ;
var txt_sex = Ext.get("txt_sex") ;
//新建一個(gè)Person對(duì)象
_person = new Ext.dojochina.Person() ;
//為對(duì)象實(shí)現(xiàn)事件處理方法
//JS里進(jìn)行激發(fā),這里進(jìn)行事件觸發(fā)后的處理
_person.on("namechange" , function(_person , _old , _new){
txt_name.dom.value = _new ;
alert(_person.getName());
}) ;
_person.on("sexchange" , function(_person , _old , _new){
txt_sex.dom.value = _new ;
}) ;
_person.on("namechange" , function(_person , _old , _new){
document.title = _new ;
}) ;
}) ;
</script>
</head>
<body>
姓名:<input type="text" id="txt_name" maxlength="10"/><br/>
性別:<input type="text" id="txt_sex" maxlength="10"/><br/>
<input type="button" value="輸入" onclick="button_click()"/>
</body>
</html>
Ext.namespace("Ext.dojochina") ;
//定義一個(gè)類(lèi)
Ext.dojochina.Person = function(){
//為類(lèi)添加事件方法
this.addEvents(
"namechange",
"sexchange"
) ;
} ;
//Person類(lèi)繼承于 Observable
Ext.extend(Ext.dojochina.Person , Ext.util.Observable , {
name:"",
sex:"",
//屬性
setName:function(_name){
if(this.name != _name){
//為對(duì)象設(shè)置新的name
this.name = _name ;
//激發(fā)起名字為namechange的事件,后面是傳的三個(gè)參數(shù)
this.fireEvent("namechange" , this , this.name , _name) ;
}
},
setSex:function(_sex){
if(this.sex != _sex){
this.sex = _sex ;
//同上
this.fireEvent("sexchange" , this , this.sex , _sex) ;
}
},
getName:function(){
return this.name;
}
}) ;
由以上具有代表性的代碼中可以總結(jié)出,一個(gè)類(lèi)要想綁定event事件,最基本和常見(jiàn)的程序設(shè)計(jì)流程是這樣的:
1、需要在聲明對(duì)象時(shí)候使用如下方法進(jìn)行聲明要綁定的事件名稱(chēng);
this.addEvents(
"namechange",
"sexchange"
2、將自定義的類(lèi)繼承于Ext.util.Observable,并且實(shí)現(xiàn)想要觸發(fā)1中定義的事件名的屬性(或者說(shuō)是方法);
setName:function(_name){
if(this.name != _name){
//為對(duì)象設(shè)置新的name
this.name = _name ;
//激發(fā)起名字為namechange的事件,后面是傳的三個(gè)參數(shù)
this.fireEvent("namechange" , this , this.name , _name) ;
}
},
注意這里的:this.fireEvent("namechange" , this , this.name , _name) ; 是觸發(fā)事件的最直觀入口。當(dāng)方法執(zhí)行到這里時(shí)候,將會(huì)激發(fā)名字為namechange的事件。
3 實(shí)現(xiàn)事件觸發(fā)后的處理邏輯。
_person.on("namechange" , function(_person , _old , _new){
txt_name.dom.value = _new ;
alert(_person.getName());
}) ;
這里的on是Extjs內(nèi)置方法,當(dāng)觸發(fā)了名字為namechange的事件時(shí)候,將會(huì)執(zhí)行function函數(shù),而這里的function的參數(shù),則是由JS里的this.fireEvent("namechange" , this , this.name , _name) ; 后面三個(gè)參數(shù)傳來(lái)的。
好,一個(gè)EXTJS最簡(jiǎn)單經(jīng)典的事件觸發(fā)機(jī)制程序代碼設(shè)計(jì)流程就是這樣的,而代碼執(zhí)行的流程,則是一個(gè)逆推的過(guò)程了。歡迎與廣大EXTJS愛(ài)好者進(jìn)行交流,我的QQ:1213145055。
本文章作者:王崇安,博客地址:http://www.cnblogs.com/wangchongan
相關(guān)文章
Extjs學(xué)習(xí)筆記之二 初識(shí)Extjs之Form
form恐怕是Web開(kāi)發(fā)中最常用的控件了,Extjs對(duì)普通的html form進(jìn)行了一些封裝,使其具有基本的外觀和一些簡(jiǎn)便的和服務(wù)器進(jìn)行通信的方法。2010-01-01EXTJS記事本 當(dāng)CompositeField遇上RowEditor
用RowEditor作批量編輯器時(shí),遇到一個(gè)問(wèn)題,想要在Roweditor中使用三個(gè)下拉列表組成級(jí)聯(lián)式選擇控件2011-07-07JavaScript的ExtJS框架中數(shù)面板TreePanel的使用實(shí)例解析
TreePanel為ExtJS提供了一個(gè)方便的樹(shù)結(jié)構(gòu)數(shù)據(jù)展示,尤其是在處理JSON格式數(shù)據(jù)時(shí)十分常用,接下來(lái)我們就來(lái)看兩則JavaScript的ExtJS框架中數(shù)面板TreePanel的使用實(shí)例解析2016-05-05學(xué)習(xí)ExtJS(二) Button常用方法
ExtJS Button常用方法,需要學(xué)習(xí)的朋友可以參考下。2009-10-10常用Extjs工具:Extjs.util.Format使用方法
常用Extjs工具:Extjs.util.Format使用方法,需要的朋友可以參考下2012-03-03EXTjs4.0的store的findRecord的BUG演示代碼
EXTjs4.0 的store的findRecord的BUG:當(dāng)判斷ID=1的時(shí)候,遇到1開(kāi)頭的ID的時(shí)候,這個(gè)時(shí)候就判斷出問(wèn)題了,有類(lèi)似問(wèn)題的朋友可以了解下哈2013-06-06Extjs中通過(guò)Tree加載右側(cè)TabPanel具體實(shí)現(xiàn)
用Extjs4.1來(lái)做界面,有關(guān)Extjs4.1資料在網(wǎng)上也相對(duì)來(lái)說(shuō)較少,下面是具體的實(shí)現(xiàn)代碼1.左側(cè)的功能樹(shù)2.需要打開(kāi)的對(duì)應(yīng)的view,有類(lèi)似需求的朋友可以參考下哈2013-05-05extjs 列表框(multiselect)的動(dòng)態(tài)添加列表項(xiàng)的方法
最近公司一個(gè)項(xiàng)目,因?yàn)橐褂胐iv模擬的窗口,因?yàn)榫寐別xtjs的大名,因此就想在項(xiàng)目中使用一下.首先下載了multiselect的extjs3.0 demo.看到的代碼這里我就不粘貼了.2009-07-07