【问题标题】:AS3 Concept similar to Event-Bubbling, in non-display-objects?在非显示对象中类似于事件冒泡的 AS3 概念?
【发布时间】:2011-08-26 10:16:44
【问题描述】:

Flash/AS3 中的事件与显示列表密切相关。有捕获、目标和冒泡阶段,这对于舞台上可见的对象来说非常棒。

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

如果我们有对象 A、B 和 C,其中 C 是在对象 B 中创建的,而 B 是在对象 A 中创建的,它们都不是显示对象:A 如何监听 C 中发生的事情?

【问题讨论】:

    标签: actionscript-3 events event-handling event-bubbling


    【解决方案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) 将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 中调用函数”相比,您的方法当然更好,因为对象不必知道它们的父对象。
    • 您可以通过编写 c.addEventListener("myEvent", dispatchEvent); 来节省一些代码行
    • @maxmc 哇!我没有考虑。对我来说,这是一个绝妙的主意!谢谢你指出!
    猜你喜欢
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 2011-07-21
    • 1970-01-01
    相关资源
    最近更新 更多