事件的流转控制

来源:互联网 发布:网络综合布线工程 编辑:程序博客网 时间:2024/04/30 05:22
 

FLEX是基于事件驱动的,在一个复杂的模型中事件的流转也会经常给人以困扰.这里用一个简单的小例子,说明一下,阻塞事件,以及跨越事件广播的两个小方法.

 

这个小例子中,是一个panel里放了一个button,panel和button都有对应的click事件,默认情况下,是点击Button时,button和Panel的事件都会同时响应的.但现在我们有这样两种需求:

 

1:点击Button时,要求响应Panel的事件,Button的事件不响应;
2:点击Button时,要求响应Button的事件,Panel的事件不响应;

  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"    
  3.     layout="vertical" creationComplete="initApp();" backgroundColor="black">   
  4.     <mx:Style source="event.css"/>   
  5. <mx:Script>   
  6.     <![CDATA[   
  7.            
  8.         private function initApp():void{   
  9.             button.addEventListener(MouseEvent.CLICK,buttonClickHandler,true);   
  10.             mypanel.addEventListener(MouseEvent.CLICK,panelClickHandler);   
  11.                
  12.             mypanel1.addEventListener(MouseEvent.CLICK,panel1ClickHandler);   
  13.             button1.addEventListener(MouseEvent.CLICK,button1ClickHandler);   
  14.         }   
  15.            
  16.         private function panelClickHandler(event:MouseEvent):void{   
  17.             msg1.text="panel click!";   
  18.         }   
  19.            
  20.         private function buttonClickHandler(event:MouseEvent):void{   
  21.             msg2.text="button click!";   
  22.         }   
  23.            
  24.         private function panel1ClickHandler(event:MouseEvent):void{   
  25.             msg3.text="panel click!";   
  26.             msg4.text="";   
  27.         }   
  28.            
  29.         private function button1ClickHandler(event:MouseEvent):void{   
  30.             msg3.text="";   
  31.             msg4.text="button click!";   
  32.             event.stopPropagation();   
  33.         }   
  34.            
  35.         private function doubleClickHanlder(event:MouseEvent):void{   
  36.             msg1.text="";   
  37.             msg2.text="";   
  38.             msg3.text="";   
  39.             msg4.text="";   
  40.         }   
  41.            
  42.         [Bindable]   
  43.         [Embed(source="thumb.jpg")]   
  44.         private var butIcon:Class;   
  45.            
  46.     ]]>   
  47. </mx:Script>   
  48. <mx:Label text="任意处双击,清除响应结果...." color="white" />   
  49. <mx:HBox width="100%" height="100%" horizontalAlign="center" verticalAlign="middle" doubleClickEnabled="true" doubleClick="doubleClickHanlder(event);">   
  50.     <mx:Panel width="300" height="300" id="mypanel"  horizontalAlign="center" verticalAlign="middle" title="只响应Panel事件:">   
  51.         <mx:Button id="button" icon="{butIcon}" labelPlacement="bottom" label="click me" />   
  52.         <mx:ControlBar>   
  53.             <mx:HBox>   
  54.                 <mx:TextInput id="msg1" width="130"/>   
  55.                 <mx:TextInput id="msg2" width="130"/>   
  56.             </mx:HBox>   
  57.         </mx:ControlBar>   
  58.     </mx:Panel>   
  59.        
  60.         <mx:VRule height="100%"/>   
  61.     <mx:Panel width="300" height="300" id="mypanel1"  horizontalAlign="center" verticalAlign="middle" title="只响应Button事件:">   
  62.         <mx:Button id="button1" icon="{butIcon}" labelPlacement="bottom" label="click me" />   
  63.         <mx:ControlBar>   
  64.             <mx:TextInput id="msg3" width="130"/>   
  65.             <mx:TextInput id="msg4" width="130"/>   
  66.         </mx:ControlBar>   
  67.     </mx:Panel>   
  68.     </mx:HBox>   
  69. </mx:Application> 
原创粉丝点击