<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    分享java帶來(lái)的快樂(lè)

    我喜歡java新東西

    flex 事件機(jī)制穿透

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" click="onAppClick(event)">
     <mx:Script>
      <![CDATA[
       import mx.controls.Alert;

      private function onButtonClick(event:Event)
      {
       trace("onButtonClick");
      }
      
      private function onPanelClick(event:Event)
      {
       trace("onPanelClick");
      }
      
      private function onAppClick(event:Event)
      {
       trace("onAppClick");
      }
      ]]>
     </mx:Script>
    <mx:Panel click="onPanelClick(event)">
    <mx:Button label="click" click="onButtonClick(event)" />
    </mx:Panel>
    </mx:Application>

    今天寫(xiě)了一些Flex代碼,在處理Flex中的事件的時(shí)候有一些不明白,仔細(xì)看了文檔之后終于明白了,在此記錄一下。

    Flex的事件其實(shí)很容易明白,象JAVA語(yǔ)言一樣,給某個(gè)控件注冊(cè)一個(gè)listener,然后事件發(fā)生的時(shí)候觸發(fā)相應(yīng)的函數(shù),這點(diǎn)我相信大多數(shù)人都能夠明白。今天我想要說(shuō)的不是這個(gè),而是更加細(xì)節(jié)的一些東西。

    1.事件的傳播過(guò)程。

    Flex事件有下面三個(gè)階段,當(dāng)事件發(fā)生時(shí)依次為:

    1.capturing(捕捉)
    2.targeting(定位)
    3.bubbling(起泡或者回溯)

    在這些階段,程序中從根節(jié)點(diǎn)到觸發(fā)事件的節(jié)點(diǎn)(這里的節(jié)點(diǎn)就是指可以把整個(gè)MXML文件看作是一個(gè)XML,那么節(jié)點(diǎn)就是各個(gè)標(biāo)簽)都有機(jī)會(huì)來(lái)響應(yīng)事件。假設(shè)用戶(hù)點(diǎn)擊了HBox容器中的一個(gè)Button,在capturing階段Flex會(huì)檢查Application和HBox是否對(duì)此事件定義了listener,然后在targeting階段Flex觸發(fā)Button的listener,在bubbling階段Flex又會(huì)檢查Application和HBox,不過(guò)這次的順序和capturing狀態(tài)時(shí)相反。也就是說(shuō),事件發(fā)生的時(shí)候從根節(jié)點(diǎn)到目標(biāo)節(jié)點(diǎn)的父節(jié)點(diǎn)有兩次機(jī)會(huì)可以響應(yīng)事件。

    整個(gè)事件的這三個(gè)階段也就形成了一個(gè)事件流。所以你可以在工作流中的任意節(jié)點(diǎn)上注冊(cè)listener而不用擔(dān)心不會(huì)被觸發(fā)。還有一點(diǎn)需要說(shuō)明的是,只有可視的對(duì)象(比如一些容器和控件)才有第一個(gè)和第三個(gè)階段,而像Socket這種沒(méi)有界面的對(duì)象只能在targeting時(shí)被觸發(fā),它無(wú)法參與第一個(gè)和第三個(gè)階段。

    雖然每個(gè)對(duì)象都有兩次響應(yīng)事件的機(jī)會(huì),但是在默認(rèn)情況下,capturing狀態(tài)時(shí)沒(méi)有對(duì)象會(huì)響應(yīng)事件,除非你特別聲明要在capturing階段響應(yīng)。你可以把addEventListener() 中的use_capture參數(shù)設(shè)置為true,這樣就可以在capturing階段響應(yīng)了。但是請(qǐng)注意,一旦在capturing中響應(yīng)過(guò)之后在bubbling階段就不會(huì)再響應(yīng)了。如果你想要讓listener在capturing和bubbling階段都響應(yīng)的話(huà),只能兩次調(diào)用addEventListener() ,一次把use_capture參數(shù)設(shè)置為true,第二次把它設(shè)置為false

    另外,你只能為可以觸發(fā)一個(gè)事件的對(duì)象注冊(cè)此事件的listener。比如,你就不能為一個(gè)Form定義一個(gè)Click事件,即使它包含一個(gè)Button控件,因?yàn)镕orm無(wú)法觸發(fā)Click事件。

    你可以使用下面兩個(gè)函數(shù)來(lái)中止事件的傳播:
    stopPropagation()
    stopImmediatePropagation()

    兩者唯一的區(qū)別就是stopPropagation()是在當(dāng)前對(duì)象的所有l(wèi)istener執(zhí)行完畢之后再中止事件的傳播,而另外一個(gè)是立刻終止。

    2.Flex事件中的target和currentTarget

    每個(gè)Event對(duì)象都有target和currentTarget屬性,他們可以幫助你跟蹤事件傳播過(guò)程。target指的是觸發(fā)事件的對(duì)象,而currentTarget則是指當(dāng)前階段正在被檢測(cè)到的對(duì)象。這樣說(shuō)可能不太好理解,拿上面的那個(gè)例子來(lái)說(shuō)吧,在單擊事件中target就是那個(gè)button(或者其子組件),不會(huì)變,而currentTarget則首先是Application,然后是HBox,然后……明白了吧?currentTarget就是當(dāng)前正在被事件所檢測(cè)的對(duì)象。currentTarget在Flex 1.5中是沒(méi)有的,是Flex 2新加入的。

    當(dāng)我點(diǎn)擊一個(gè)Button時(shí),target很有可能并不是這個(gè)Button,而是Button的UITextField,就是顯示按鈕文字的組件。但是大多數(shù)時(shí)候你都是想操作Button對(duì)象或者其他注冊(cè)了listener的對(duì)象,很少有人為UITextField對(duì)象注冊(cè)listener。所以大多數(shù)時(shí)候你都用currentTarget而不是target來(lái)操作他們。舉個(gè)例子:

     

    <mx:Button label="OK" click="trace(event.currentTarget.label)"/>

     

    在這種情況下,currentTarget就是指Button,而target指什么就取決于用戶(hù)點(diǎn)擊了Button上哪個(gè)地方了。所以一般你很少用到target屬性,大多數(shù)情況下都應(yīng)該使用currentTarget。

    終于總結(jié)完了,好像事件還有許多其他我沒(méi)注意的地方,如果你認(rèn)為我疏忽了什么,please leave a comment。Thank you.



     

    posted on 2011-05-13 06:57 強(qiáng)強(qiáng) 閱讀(681) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): flex 技術(shù)分類(lèi)


    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲欧洲美洲无码精品VA | 国产精品亚洲片在线观看不卡| 中国在线观看免费的www| 久久精品国产亚洲av麻豆小说| 成人免费午间影院在线观看| 一级毛片免费一级直接观看| 亚洲性色成人av天堂| 全部免费毛片在线| 99在线热视频只有精品免费| 国产精品手机在线亚洲| 亚洲av丰满熟妇在线播放| 免费的涩涩视频在线播放| 免费无遮挡无码永久视频| 国产精品亚洲片在线花蝴蝶| 亚洲福利在线观看| 亚洲高清偷拍一区二区三区| 国产在线jyzzjyzz免费麻豆| 国产无遮挡色视频免费观看性色| 国产.亚洲.欧洲在线| 亚洲国产精品高清久久久| 暖暖免费高清日本中文| 91人成网站色www免费下载| 在线播放国产不卡免费视频| 亚洲国产精品综合一区在线| 亚洲日本va中文字幕久久| 免费无码看av的网站| 久久久久久精品免费看SSS| 中国在线观看免费的www| 水蜜桃视频在线观看免费| 亚洲AV无码乱码在线观看代蜜桃 | 日本黄色动图免费在线观看| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 五月婷婷在线免费观看| 中文字幕免费观看视频| 看亚洲a级一级毛片| 亚洲日韩亚洲另类激情文学| 久久亚洲AV成人无码软件| 亚洲乱码无码永久不卡在线| 亚洲?V无码成人精品区日韩| 成人黄页网站免费观看大全| 18女人腿打开无遮掩免费|