云下的天空

          堅持 隨心而動 走自己的路

           

          (轉載)冒泡事件理解2

          1.

          項目 右鍵 新建 包

          右鍵單擊新建的包,新建 actionscript類

          代碼如下(代碼1)

          package btnEvents
          {
              import flash.events.Event;
              
              public class btnEvent1 extends Event
              {
                  public static var EVENT_NAME:String="customEvent";

                  //該事件所攜帶的數據
                  public var EventData:String;        
                  public function btnEvent1(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
                  {
                      super(type, bubbles, cancelable);
                  }
              }
          }

           

          2.

          主MXML文件如下所示

          <?xml version="1.0" encoding="utf-8"?>
          <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
                         xmlns:s="library://ns.adobe.com/flex/spark" 
                         xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:Modules="Modules.*"
                         creationComplete="init()"
                         >

              <fx:Script>
                  <![CDATA[
                      import btnEvents.btnEvent1;
                      private function init():void{
                          this.addEventListener(btnEvent1.EVENT_NAME,appCatchMyEvent,true);
                          this.panel1.addEventListener(btnEvent1.EVENT_NAME,panelCatchEvent,true);
                      }
                      private function sendEvent(flag:int):void{
                          var Event:btnEvent1=new btnEvent1(btnEvent1.EVENT_NAME);
                          if(flag == 1){
                              Event.EventData = "內部按鈕";
                              btn1.dispatchEvent(Event);//將事件分派到事件流中
                          }else{
                              Event.EventData = "外部按鈕";
                              btn2.dispatchEvent(Event);//將事件分派到事件流中
                          }
                      }
                      private function appCatchMyEvent(par_event:btnEvent1):void{
                          label1.text += par_event.currentTarget.id+par_event.EventData;//currentTarget是傳播路徑上的當前捕捉者
                      }
                      private function panelCatchEvent(par_event:btnEvent1):void{
                          label1.text += par_event.currentTarget.id+par_event.EventData;
                      }
                  ]]>
              </fx:Script>

              <fx:Declarations>
                  <!-- 將非可視元素(例如服務、值對象)放在此處 -->
              </fx:Declarations>
              <s:Panel id="panel1" x="198" y="128" width="250" height="200">
                  <s:Button click="sendEvent(1)" id="btn1" x="89" y="61" label="內部BTN"/>
              </s:Panel>
              <s:Button id="btn2" click="sendEvent(2)" x="378" y="360" label="外部BTN"/>
              <s:Label id="label1" x="198" y="66" text="事件來自~~~~" width="189"/>

          </s:Application>

          3.

          運行程序

          點擊“內部BTN:

          結果如圖所示

          image

          大家可以看到
          事件是從外層容器到內層容器依次執行的

           

          4.

          刷新頁面

          點擊“外部BTN”

          結果如圖所示

          image

          因為事件的引發者沒有在panl1中所以不會再觸發panel1的事件了

           

          以上說的都是非冒泡事件,事件的執行順序是從外層容器到內層容器執行的

           

          5.

          如果要在事件冒泡階段捕捉事件

          創建事件的代碼為

          var Event:btnEvent1=new btnEvent1(btnEvent1.EVENT_NAME,true);//最后一個參數bubbles應為true

          事件監聽的代碼應如下

          this.panel1.addEventListener(btnEvent1.EVENT_NAME,panelCatchEvent,false);//最后一個參數useCapture是false

          這樣設置后就是冒泡事件,事件的執行順序是從內層容器到外層容器執行的

           

          6.

          如果即要捕捉非冒泡事件,又要捕捉冒泡事件

          那么

          創建事件的代碼為

          var Event:btnEvent1=new btnEvent1(btnEvent1.EVENT_NAME,true);//最后一個參數bubbles應為true

          同時,監聽事件的代碼還要設置兩次

          this.panel1.addEventListener(btnEvent1.EVENT_NAME,panelCatchEvent,true);//非冒泡監聽
          this.panel1.addEventListener(btnEvent1.EVENT_NAME,panelCatchEvent,false);//冒泡監聽

          這樣設置之后,事件先從外部執行到內部,在從內部執行到外部 

          原文鏈接:http://www.cnblogs.com/liulun/archive/2010/11/23/1885053.html



          posted on 2011-06-05 18:08 天空布藍 閱讀(418) 評論(0)  編輯  收藏 所屬分類: Flex4

          導航

          統計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          Flex學習鏈接

          搜索

          •  

          最新評論

          • 1.?re: tomcat7的配置
          • 新建變量名: TOMCAT_HOME 應該為CATALINA_HOME
          • --houkai
          • 2.?re: tomcat7的配置
          • 確實是的@寒澈
          • --houkai
          • 3.?re: tomcat7的配置
          • @ftp123
            你娘里個大雪碧 里面會有common這個文件夾嗎 不知道還尼瑪在這瞎比比 純尼瑪誤導人 我最惡心的就是這樣沒事裝逼的人 艸
          • --cao
          • 4.?re: tomcat7的配置
          • 從哪抄來的,是抄的,你也說聲啊,要不自己測試下也可以,害人測試半天。
          • --ftp123
          • 5.?re: tomcat7的配置
          • %TOMCAT_HOME%\common\lib 從tomcat6.0開始已經沒有common文件夾了,直接用\lib,害我找了半天common文件夾啊,趕快改過來吧
          • --寒澈

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 手机| 民丰县| 延边| 红安县| 益阳市| 藁城市| 聊城市| 云龙县| 湖北省| 瑞金市| 临安市| 特克斯县| 蓝田县| 英德市| 吉林省| 航空| 吉木萨尔县| 汉阴县| 丰城市| 额敏县| 修水县| 阜康市| 涿鹿县| 新野县| 鹤庆县| 大兴区| 井陉县| 本溪市| 开化县| 贵港市| 罗甸县| 台江县| 沙河市| 阜康市| 吉木萨尔县| 白水县| 佛冈县| 庆元县| 宁蒗| 衡阳市| 浦城县|