加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex的事件-- 事件的优先权

发布时间:2020-12-15 01:15:51 所属栏目:百科 来源:网络整理
导读:?你可以为一个事件注册多个事件监听器。Flex按照通过addEventListener()方法注册监听器的顺序调。不过,如果你注册了一些行内的监听器,又通过addEventLisntener()方法添加了一些监听器,事件监听器的调用顺序将不可预知。 ??????? ???????? 你可以通过使用a
?你可以为一个事件注册多个事件监听器。Flex按照通过addEventListener()方法注册监听器的顺序调。不过,如果你注册了一些行内的监听器,又通过addEventLisntener()方法添加了一些监听器,事件监听器的调用顺序将不可预知。
???????
???????? 你可以通过使用addEventListener()方法的priority参数来改变事件监听器的调用顺序。

???????? Flex按照priority参数从高到低的顺序调用监听器。优先级最高的第一个调用。下面的例子中,Flex在saveInputDate()函数前调用verifyInputData()方法,最后一个调用的是returnResult()方法。
Java代码

?

  1. <?xml?version="1.0"?> ??
  2. <!--?events/ShowEventPriorities.mxml?--> ??
  3. <mx:Application?xmlns:mx="http://www.adobe.com/2006/mxml"?creationComplete="initApp()"> ??
  4. <mx:Script><![CDATA[ ??
  5. private?function?returnResult(e:Event):void?{ ??
  6. ta1.text?+=?"returnResult()?method?called?last?(priority?1)n"; ??
  7. } ??
  8. private?function?verifyInputData(e:Event):void?{ ??
  9. ta1.text?+=?"verifyInputData()?method?called?first?(priority?3)n"; ??
  10. } ??
  11. private?function?saveInputData(e:Event):void?{ ??
  12. ta1.text?+=?"saveInputData()?method?called?second?(priority?2)n"; ??
  13. } ??
  14. private?function?initApp():void?{ ??
  15. b1.addEventListener(MouseEvent.CLICK,?returnResult,?false,?1); ??
  16. b1.addEventListener(MouseEvent.CLICK,?saveInputData,?2); ??
  17. b1.addEventListener(MouseEvent.CLICK,?verifyInputData,?3); ??
  18. } ??
  19. ]]></mx:Script> ??
  20. <mx:Button?id="b1"?label="Click?Me"/> ??
  21. <mx:TextArea?id="ta1"?height="200"?width="300"/> ??
  22. </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属性:

Java代码

?

  1. <!--?events/AccessEventSpecificProperties.mxml?--> ??
  2. <mx:Application?xmlns:mx="http://www.adobe.com/2006/mxml"?initialize="addListeners()"> ??
  3. <mx:Script><![CDATA[ ??
  4. import?mx.controls.Alert; ??
  5. private?function?customLogEvent(e:Event):void?{ ??
  6. var?a:MouseEvent?=?MouseEvent(e); ??
  7. Alert.show("Y:?"?+?a.localY?+?"n"?+?"X:?"?+?a.localX); ??
  8. } ??
  9. private?function?addListeners():void?{ ??
  10. b1.addEventListener(MouseEvent.CLICK,?customLogEvent); ??
  11. } ??
  12. ]]></mx:Script> ??
  13. <mx:Button?id="b1"?label="Click?Me"/> ??
  14. </mx:Application>??

如果你将Event对象定义为一个特殊的类型,你就不需要在函数中进行类型转换。如下所示:

private function customLogEvent(e:MouseEvent):void { ... }

在前面的例子中,你也可以只在访问属性时使用下面例子中的语法转换Event对象:
Java代码

?

  1. <!--?events/SinglePropertyAccess.mxml?--> ??
  2. <mx:Application?xmlns:mx="http://www.adobe.com/2006/mxml"?initialize="addListeners()"> ??
  3. <mx:Script><![CDATA[ ??
  4. import?mx.controls.Alert; ??
  5. private?function?customLogEvent(e:Event):void?{ ??
  6. Alert.show("Y:?"?+?MouseEvent(e).localY?+?"n"?+?"X:?"?+?MouseEvent(e).localX); ??
  7. } ??
  8. private?function?addListeners():void?{ ??
  9. b1.addEventListener(MouseEvent.CLICK,?customLogEvent); ??
  10. } ??
  11. ]]></mx:Script> ??
  12. <mx:Button?id="b1"?label="Click?Me"/> ??
  13. </mx:Application>??


? 这样做虽然将使用更少的内存和系统资源,但是最好还是尽可能的将事件类型定义为特殊的类型。
???????
???????? 每个Event对象的子类都提供该类型所独有的额外的属性和事件类型。MouseEvent类定义了与输入设备有关的几种事件,包括CLICK,DOUBLE_CLLICK,MOUSE_DOWN和MOUSE_UP事件类型。

http://fykyx521.iteye.com/category/61698?show_full=true

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读