- 资讯类型:
- 来源页面: http://robertpenner.com/flashblog/2009/09/my-critique-of-as3-events-part-2.html
- 资讯原标题: My Critique of AS3 Events - Part 2 - The Dispatchening
- 资讯原作者: Robert Penner
我的评论:
对这篇文你有啥看法,跟贴说说吧!欢迎口水和板砖,哈哈。欢迎大家和我们一同分享更多资讯。
flash.events.EventDispatcher可以更容易地被移除
removeAllEventListeners(),你在哪里?大家都在找你。
移除侦听器需要标记出首次被调用的名称,这种方式并不是很好。
无论如何,OOP思想就这样,自行处理自己的行为而不是为难子类。
让我们创建一个新的类,覆盖addEventListener()和..
flash.events.EventDispatcher难以扩展
看上去我的子类不能访问EventDispatcher中的所有侦听器。
我会用一个数组保持侦听器,所以我能很容易的移除它们。在之前它要做的事情:
http://k2xl.com/wordpress/2008/0 ... removealllisteners/
http://code.google.com/p/k2xl/so ... 2xl/EventManager.as
但是现在我的数组中所有侦听器都是强引用,useWeakReference选项就没啥用了。
从理论上说,字典可以有弱引用,可惜的是,字典利用弱关键字存储方法还有漏洞storing methods in a weak keys Dictionary is buggy。此外,字典也没有队列的概念,如果我需要知道侦听者顺序怎么办?难道要为每一个侦听者创建弱引用字典和其它一系列的字典?虽然它已经完成(查看),但我不会考虑使用直到词典错误都修复完毕。
嗯。。。能用特殊的数组处理弱引用?继续做梦。
其要点是,flash.events.EventDispatcher是一个黑盒子——令人沮丧的一种。
哦好,至少我们有IEventDispatcher接口。它看上去有很多的工作,但是我可以从头开始写自已的事件广播器并实现接口,对不?
IEventDispatcher无法实现
这种说法不完全正确的。它可以实现但不完美,或许有方法但我还不知道而已。
因此,我放弃事件广播器构建从IEventDispatcher实现。我自定义添加或移除侦听器,甚至移除所有侦听器!形势看起来在好转。
现在是精彩部分:dispatchEvent()方法。为事件类型找到侦听器数组。现在我将设置event.target属性,遍历
Event.target属性只读
A:会有人需要改变活动的目标?
B:不可思议!
但是,这里必须提供更改事件目标的方法,对不?
EventDispatcher和IEventDispatcher紧密相关
flash.events.Event与flash.events.EventDispatcher两者是一个秘密联盟。
只有EventDispatcher肩负着令人敬畏的力量——改变目标。
你不得不从flash.events.Event继承,因为没有事件接口。
如果你高兴可以编写自己的事件广播器,但是你遇到的难题是target和currentTarget会一直为null。你不得不使用EventDispatcher实例广播事件。这使得你感到很惊讶为什么会这么麻烦。