2011-08-26 38 views
0

Flash/AS3中的事件与显示列表非常相关。有捕捉,目标和冒泡阶段,这对于舞台上可见的对象来说非常棒。AS3在非显示对象中类似于事件冒泡的概念?

但有非显示对象类似的概念,显示列表之外?

如果我们有对象A,B和C,其中C是在对象B创建的,和B是在对象的创建,他们都不是显示对象:A如何能听的东西用C发生了什么?

回答

1

可以使用至少两种策略解决问题:

1)事件的再次指派。说C发送一些事件。在B我们同意这一事件,并重新调度它:

var c:C = new C(); 
c.addEventListener("myEvent", myEventHandler); 

private function myEventHandler (event:Event):void 
{ 
    dispatchEvent(event); 
} 

记住,你应该implement clone()正确在这种情况下,您的自定义事件类。

您还可以将事件从C转换为B中的其他事件并发送它。

2)通到CA。你可以使用interface flash.events.IEventDispatcher

类似以下内容:

B

private var _c:IEventDispatcher; 

public function get innerInstance():IEventDispatcher 
{ 
    return _c; 
} 

public function B() 
{ 
    _c = new C(); 
} 

A

var b:B = new B(); 
b.innerInstance.addEventListener("myEvent", myEventHandler); 
+0

谢谢您的回答!我想我理解这两种策略是如何工作的,至少1)对我来说是完全清楚的。 我认为这是一个缺点为“正常”的显示列表基于事件处理,所述中间对象(B,在这种情况下)具有参与。但也许没有更好的选择。 但相比“C调用B中的功能,这在A调用一个函数”,你的方法当然是更好,因为对象不必知道他们的父母。 – Guppel

+1

您可以通过编写c.addEventListener节省一些代码行(“myEvent”,则dispatchEvent); – maxmc

+0

@maxmc哇!我没有想过。至于我这是一个绝妙的主意!谢谢你指出! – Constantiner