FLEX 2.0(也就是AS3.0)事件机制

 

当一个事件触发会有三个阶段让程序捕获:

第一阶段:事件的捕获阶段
下一个:目标捕获阶段
最终:冒泡捕获
1)事件捕获阶段
     捕获顺序是自祖先组件到事件触发组件层层执行的。比如下面一个层次关系的执行顺序为:先检查Application是否有监听器,再是Pannel最后是TitleWindow。
Application    Panel        TitleWindow            Button(bt1)   捕获这个阶段的事件是需要设置addEventListener的第三个参数为true的,也就是addEventListener(event-name,eventHandler,useCapture=true);   关于本阶段监听器的参数Event对象有两个属性的变化值得注意。一个是target,它一直引用着触发事件的对象。currentTarget始终引用的是当前处理事件的节点的对象。例如:在每个对象上全部加上监听监听: bt1.addEventListener(Mouse_Event.MOUSE_DOWN,'eventHandler',true);其他省略。。。public funtion eventHandler(e:Event):void { mx.controls.Alert.show(e.currentTarget.id); mx.controls.Alert.show(e.target.id);}看可以看出target以及currentTarget的变化情况。第三个阶段也是如此测试。目标捕获阶段    这个阶段只执行事件触发对象的listener,target和currentTarget指向同一个对象--事件触发者。冒泡阶段    没什么好说的,只不过要想捕获这个阶段的事件必须把setEventListener的useCapture值得设为false,这点跟第一个阶段相反,而且他们的捕获顺序也相反,在这个阶段,事件的触发顺序是从事件触发者开始,逐层向上传递。target和currentTaget变化情况同第一阶段。差点忘了,在事件的任何阶段,你都可以调用
stopPropagation()
stopImmediatePropagation()
来停止事件的继续传递,但他们产生的效果是不一样的。
stopPropagation(),事件传递给下一个对象,并继续执行当前节点的其他事件捕获。
stopImmediatePropagation(),事件传递给下一个对象,但同时停止执行当前节点的其他事件捕获。

复制个例子:

<?xml version="1.0"?><mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"        initialize="init(event)">    <mx:Script><![CDATA[        import mx.controls.Alert;        import flash.events.MouseEvent;        import mx.events.Event;                public function init(e:Event) {            p1.addEventListener(MouseEvent.MOUSE_DOWN,showAlert);            tw1.addEventListener(MouseEvent.MOUSE_DOWN,showAlert);            tw1.addEventListener(Event.CLOSE,closeWindow);        }        public function showAlert(e:Event) {            Alert.show("Alert!\n" + e.currentTarget + "\n" + e.eventPhase);            e.stopImmediatePropagation();        }        public function closeWindow(e:Event) {            p1.removeChild(tw1);        }    ]]></mx:Script>    <mx:Panel id="p1" title="Panel 1">        <mx:TitleWindow id="tw1" width="300" height="300" showCloseButton="true"            title="Title Window 1">            <mx:Button label="Enter name"/>            <mx:TextArea id="ta1"/>        </mx:TitleWindow>    </mx:Panel></mx:Application>
 

你可能感兴趣的:(xml,Flex,Flash,Adobe)