1.6.在MXML中添加事件
2024-04-27 13:51:41
供稿:網(wǎng)友
1.6.1.問題
我想在MXML中添加事件器來MXML文件中的子對(duì)象所發(fā)出的事件。
1.6.2.解決辦法
傳遞一個(gè)方法名給組件的event標(biāo)簽并發(fā)送一個(gè)event對(duì)象(可選)。
1.6.3.討論
當(dāng)一個(gè)行為發(fā)生時(shí),F(xiàn)lex組件便會(huì)發(fā)出相應(yīng)事件信號(hào),比如用戶點(diǎn)擊一個(gè)按鈕, 選擇列表框的某一項(xiàng)或者數(shù)據(jù)讀取。要這些被廣播出去的事件,最簡(jiǎn)單的方法就是添加一個(gè)函數(shù)引用,該函數(shù)將處理這個(gè)事件,例如:
+展開
-XML
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400"
height="300">
<mx:Script>
<![CDATA[
private function buttonClick():void{
trace("Button has been clicked");
}
]]>
</mx:Script>
<mx:Button click="buttonClick()" label="Click Me"/>
</mx:Canvas>
添加click="buttonClick()",當(dāng)按鈕發(fā)出click事件時(shí)將調(diào)用buttonClick函數(shù)。
你還可以傳遞事件對(duì)象本身給這個(gè)函數(shù),每次組件發(fā)出該事件時(shí),組件也會(huì)發(fā)送Event類型的對(duì)象給它的處理函數(shù),例如:
+展開
-XML
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" width="400"
height="300">
<mx:Script>
<![CDATA[
private function buttonClick(event:Event):void{
trace(event.target.id);
if(event.target.id == "buttonOne"){
trace("button one was clicked")
}
else{
trace("button two was clicked")
}
}
]]>
</mx:Script>
<mx:Button click="buttonClick(event)" label="Click Me One" id="buttonOne"/>
<mx:Button click="buttonClick(event)" label="Click Me Two"
id="buttonTwo"/>
</mx:HBox>
通過事件偵聽器以偵聽的Event類型的對(duì)象,給事件偵聽器發(fā)送該事件并以不同的方式反饋,具體取決于指定的條件。在此示例中,響應(yīng)該事件取決于事件來源。
Flex中的事件對(duì)象以及事件發(fā)送系統(tǒng)是一個(gè)非常重要的內(nèi)容。所有事件都包含一個(gè)正在偵聽該事件時(shí)所使用的類型,如果該事件是click事件,那么子對(duì)象的click事件就會(huì)加入事件方法:
+展開
-XML
<mx:Button click="trace('I was clicked')"/>
用戶交互的通知,應(yīng)用程序發(fā)送消息或定時(shí)發(fā)送給服務(wù)器,事件對(duì)象定義了一些任何函數(shù)都可以訪問的屬性,如下所示:
bubbles
指示事件是否是冒泡事件,即是否從已接收任何偵聽器進(jìn)一步沿事件鏈向上重新發(fā)送該事件對(duì)象。
cancelable
指示該事件是否是可取消的。
currentTarget
處于活動(dòng)進(jìn)程的事件對(duì)象。
eventPhase
事件流的當(dāng)前階段
Target
事件目標(biāo),即發(fā)出該事件的對(duì)象
Type
事件類型
你也可以在MXML中通過綁定標(biāo)簽{}直接寫入事件處理語(yǔ)句。
+展開
-XML
<mx:Button click="{textComponent.text='You clicked the button'" label="Click Me"/>
<mx:Text id="textComponent"/>
當(dāng)編譯這段代碼時(shí),編譯器會(huì)創(chuàng)建一個(gè)函數(shù),設(shè)置textComponent.text = 'You clicked the button'作為函數(shù)體的內(nèi)容。這種寫法看起來不一樣,但是其結(jié)果都是一樣的:事件并執(zhí)行代碼。
這種方法本身并沒有錯(cuò)誤,但是如果處理的是復(fù)雜的事情而非簡(jiǎn)單的設(shè)置一個(gè)屬性,定義一個(gè)函數(shù)會(huì)使你的代碼看起來清晰的多,且更易于閱讀和理解。