AS3概念类似于事件冒泡,在非显示对象中



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)传递CA。您可以使用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);

相关内容

  • 没有找到相关文章

最新更新