快速业务通道

V2组件事件模型part1-事件分派器(eventDispatcher)

作者 佚名技术 来源 服务器技术 浏览 发布时间 2012-07-13


这一阵一直在研究有关MX2004的组件开发的相关内容,找到不少不错的相关文章,不敢独享,先翻译一篇有关事件模型的供大家共同学习。 第一次做翻译工作,呵呵,难免有出错的地方,尽请各位指正! The V2 Component Event Model Part 1- EventDispatcher 作者:Philter 翻译:xiankevin 原文地址http://www.philterdesign.com/blog/archives/000013.HTML 当花了一些时间熟悉V2组件的事件模型之后,我觉得可以写一些自己的心得,当然更希望对别人有用。 V2组件的事件模型是基于监听器(listener),而不是像V1中基于回调函数(callbacks)。 Flash MXV1组件中,比如你可以使用”setClickHandler”将一个函数注册(register:为当组件被点击的时候调用的回调函数。你需要指定包含着个函数的对象,如果你没有指定,Flash会自动在组件的_parent范围内查找这个函数。但这种方法有一些小的局限,因为你必须有让事件触发时调用的一段代码,并且给所有的相应的目标发送这个消息。 Flash MX实际上有一个内建机制用于实现事件监听,就是ASBroadcaster。这是一个允许你快速建立一个事件广播模型的内部对象(mm的帮助文档并没有提到),提供了添加、移除监听对象,并对这些对象广播事件的方法。但被发现存在一些小bug,导致”only every second eventhandler being called, if listeners are removed in the eventhandler”(不是很理解,汗!)。其他也还有另外一些用于克服这个缺点的基于监听器的事件模型。 Flashplayer7仍然支持ASBroadcaster,在将影片导出为Flashplayer7版本的swf时,似乎也修正了这个bug。但注意在Flash MX 2004AsBroadcaster,这里s小写! 上面扯了这么多目的是引出下面这些—— V2组件实现了一个不用到AsBroadcaster的监听器模型。就是EventDispatcher类(位置在安装文件夹\en\First Run\Classes\mx\events下),用于给UIObject(是所有组件的基础)添加事件广播(在2004中称为分派(dispatch)功能。它与AsBroadcaster的工作方式在本质上是相同的。 1) 通过调用EventDispatcher.initialize(dispathingObj)建立一个分派器对象。 2) 调用dispatchingObj.addEventListener(“event”,listeringObj) dispatchingObj.removeEventListener(listeningObj)来添加、移除一个监听器。 3) 调用dispatchingObj.dispatchEvent(eventObj)为这些监听器分派(广播)事件。 有一些细节需要注意: 1) 看起来似乎EventDispatcher基于被注册监听的事件的类型将监听器加以分类。而据我所知Asbroadcaster仅仅将所有的监听器依附于一个监听器组,并为所有监听器广播所有事件——如果一个监听器没有设置特定的事件处理方法则默认事件广播失败。EventDispatcher实际上为每个事件创建了各自的监听器组。这样,当一个特定的事件被分派时,仅仅查找此事件相关的监听器组。这是一个细节的,也是一个重大的差别! 2) 当通过EventDispatcher分派事件时,仅仅传递了一个包含所有你想要传递给监听器内容的属性的事件对象(event object而不是像之前一样需要传递此事件与一大堆的参数。这个对象的一些重要属性有: “type”-必需的属性,指明你分派的事件。 “target”-可选的属性,允许你向监听器的处理函数中传递一个对象的引用。如果未指明,则默认指向你的分派器对象。 3) 在你的dispatcher传递被事件监听器调用的该事件之前,实际上会先调用一个内部的方法(有些像V1组件中的”click handler”),这让你如果需要可以使dispatcher对它本身做一些处理(所以类似V1组件中的回调模

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号