Flex的事件-- 事件的优先权
发布时间:2020-12-15 01:15:51 所属栏目:百科 来源:网络整理
导读:?你可以为一个事件注册多个事件监听器。Flex按照通过addEventListener()方法注册监听器的顺序调。不过,如果你注册了一些行内的监听器,又通过addEventLisntener()方法添加了一些监听器,事件监听器的调用顺序将不可预知。 ??????? ???????? 你可以通过使用a
?你可以为一个事件注册多个事件监听器。Flex按照通过addEventListener()方法注册监听器的顺序调。不过,如果你注册了一些行内的监听器,又通过addEventLisntener()方法添加了一些监听器,事件监听器的调用顺序将不可预知。
??????? ???????? 你可以通过使用addEventListener()方法的priority参数来改变事件监听器的调用顺序。 ???????? Flex按照priority参数从高到低的顺序调用监听器。优先级最高的第一个调用。下面的例子中,Flex在saveInputDate()函数前调用verifyInputData()方法,最后一个调用的是returnResult()方法。
<?xml version="1.0"?> <!-- events/ShowEventPriorities.mxml --> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp()"> <mx:Script><![CDATA[ private function returnResult(e:Event):void { ta1.text += "returnResult() method called last (priority 1)n"; } private function verifyInputData(e:Event):void { ta1.text += "verifyInputData() method called first (priority 3)n"; } private function saveInputData(e:Event):void { ta1.text += "saveInputData() method called second (priority 2)n"; } private function initApp():void { b1.addEventListener(MouseEvent.CLICK,returnResult,false,1); b1.addEventListener(MouseEvent.CLICK,saveInputData,2); b1.addEventListener(MouseEvent.CLICK,verifyInputData,3); } ]]></mx:Script> <mx:Button id="b1" label="Click Me"/> <mx:TextArea id="ta1" height="200" width="300"/> </mx:Application> ? 你可以将优先级设定为任何有效的整数,可以使正数也可以是负数。如果多个监听器拥有相同的优先级,那么它们将按照注册的顺序被调用。 ???????? 一旦事件监听器被定义,如果你再想改变监听器的优先级,就必须首先调用removeEventListener()方法移除监听器,然后再使用新的优先级添加监听器。 ???????? addEventListener()方法的priority参数并不是官方的DOM Level 3事件模型的一部分。 ???????? 即使你为一个事件监听器设定了一比其他监听器都要高的优先级,也不能保证这个监听器一定会在其他监听器之前被调用。你必须确定在下一个监听器被调用之前,监听器不依赖于其他监听器的完整的执行。了解这一点非常重要,Flash Player没有必要在调用下一个监听器之前等待前一个监听器完成处理。 ???????? 如果你的监听器依赖于其他的监听器,你可以在一个监听器中调用其它的监听器,或者在第一个事件监听器中调度一个新的事件。 二、?? 使用事件子类 依赖与事件类型,Event对象可以拥有一个范围很大的属性集合。这些属性都基于W3C的说明而定义,但是Flex并没有提供全部的实现。 当你在事件监听器函数中定义一个Event对象时,你可以将它定义为Event类型,或者你可以指定一个Event对象的子类。下面的例子中,你指定事件对象的类型为MouseEvent: public function performAction(e:MouseEvent):void { ... } 多数控件都会生成一个特殊的事件类型。指定一个更加特殊的事件类型,你就可以访问特殊的属性,而不需要进行类型转换。此外,一些Event对象的子类型还提供了基础的Event类型所没有的方法。 一个在运行时定义的事件对象可以是编译期类型的一个子类。即使你没有定义特殊的事件类型,只要你将Event对象转换为一个特殊的类型,你仍然可以在事件监听器中访问那些事件的特殊属性。在下面的例子中,函数将对象类型定义为Event。不过,在函数中,必须先将Event对象转换为MouseEvent理性,你才能访问localX和localY属性:
<!-- events/AccessEventSpecificProperties.mxml --> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" initialize="addListeners()"> <mx:Script><![CDATA[ import mx.controls.Alert; private function customLogEvent(e:Event):void { var a:MouseEvent = MouseEvent(e); Alert.show("Y: " + a.localY + "n" + "X: " + a.localX); } private function addListeners():void { b1.addEventListener(MouseEvent.CLICK,customLogEvent); } ]]></mx:Script> <mx:Button id="b1" label="Click Me"/> </mx:Application> 如果你将Event对象定义为一个特殊的类型,你就不需要在函数中进行类型转换。如下所示: private function customLogEvent(e:MouseEvent):void { ... } 在前面的例子中,你也可以只在访问属性时使用下面例子中的语法转换Event对象:
<!-- events/SinglePropertyAccess.mxml --> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" initialize="addListeners()"> <mx:Script><![CDATA[ import mx.controls.Alert; private function customLogEvent(e:Event):void { Alert.show("Y: " + MouseEvent(e).localY + "n" + "X: " + MouseEvent(e).localX); } private function addListeners():void { b1.addEventListener(MouseEvent.CLICK,customLogEvent); } ]]></mx:Script> <mx:Button id="b1" label="Click Me"/> </mx:Application>
http://fykyx521.iteye.com/category/61698?show_full=true (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- C#DateTime,这个方法区域设置安全吗?
- ruby-on-rails – Rails:验证关联的存在
- postgresql , postgis 安装
- Unity3D研究院之将场景导出XML或JSON或二进制并且解析还原场
- c# – 通过向命令窗口发送击键来注入命令?
- objective-c – NSManagedObject子类生成的CoreDataPropert
- xml解析-dom4j(比较流行,第三方提供)
- 机房收费系统 Part Six——MSFlexGrid控件总结
- 在$SAFE> = 1的ruby中有什么漏洞?
- Flex中如何利用Bitmap和BitmapData类复制图片到一个TileLis