0
Flash/AS3中的事件与显示列表非常相关。有捕捉,目标和冒泡阶段,这对于舞台上可见的对象来说非常棒。AS3在非显示对象中类似于事件冒泡的概念?
但有非显示对象类似的概念,显示列表之外?
如果我们有对象A,B和C,其中C是在对象B创建的,和B是在对象的创建,他们都不是显示对象:A如何能听的东西用C发生了什么?
Flash/AS3中的事件与显示列表非常相关。有捕捉,目标和冒泡阶段,这对于舞台上可见的对象来说非常棒。AS3在非显示对象中类似于事件冒泡的概念?
但有非显示对象类似的概念,显示列表之外?
如果我们有对象A,B和C,其中C是在对象B创建的,和B是在对象的创建,他们都不是显示对象:A如何能听的东西用C发生了什么?
可以使用至少两种策略解决问题:
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)通到C
A
。你可以使用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);
谢谢您的回答!我想我理解这两种策略是如何工作的,至少1)对我来说是完全清楚的。 我认为这是一个缺点为“正常”的显示列表基于事件处理,所述中间对象(B,在这种情况下)具有参与。但也许没有更好的选择。 但相比“C调用B中的功能,这在A调用一个函数”,你的方法当然是更好,因为对象不必知道他们的父母。 – Guppel
您可以通过编写c.addEventListener节省一些代码行(“myEvent”,则dispatchEvent); – maxmc
@maxmc哇!我没有想过。至于我这是一个绝妙的主意!谢谢你指出! – Constantiner