Flash/AS3中的事件与显示列表紧密相连。有捕获、目标和冒泡阶段,当涉及到舞台上可见的对象时,这是非常棒的。
但是对于显示列表之外的非显示对象是否有类似的概念?
如果我们有对象A, B和C,其中C在对象B中创建,B在对象A中创建,并且它们都不是显示对象:A如何侦听C中发生的事情?
您可以使用至少两种策略来解决您的问题:
1)事件的重新调度。假设C
调度了某个事件。在B
中,我们订阅这个事件并重新调度它:
var c:C = new C();
c.addEventListener("myEvent", myEventHandler);
private function myEventHandler (event:Event):void
{
dispatchEvent(event);
}
请记住,在这种情况下,您应该为您的自定义事件类正确地实现clone()
。
您还可以将C
中的事件转换为B
中的其他事件并调度它。
2)传递C
给A
。您可以使用flash.events.IEventDispatcher
接口来实现。
类似如下:
In B
:
private var _c:IEventDispatcher;
public function get innerInstance():IEventDispatcher
{
return _c;
}
public function B()
{
_c = new C();
}
In A
:
var b:B = new B();
b.innerInstance.addEventListener("myEvent", myEventHandler);