【问题标题】:AS3: Can I dispatch Event from one Child to another?AS3:我可以将事件从一个孩子分派给另一个孩子吗?
【发布时间】:2013-04-22 07:22:01
【问题描述】:

大家好,我无法解开这个谜团 :)。

如何从 Child1 发送 dispatchEvent 并在 Child2 中捕获此事件?

如何从 Child1 发送 dispatchEvent 并在 Child3 中捕获此事件?

如何从 Child3 发送 dispatchEvent 并在 Child1 中捕获此事件?

谢谢各位。我会在这里得到一些帮助!

【问题讨论】:

    标签: actionscript-3 events dispatcher children


    【解决方案1】:

    虽然我得到了您想要实现的目标,但我认为更好的设计方法是允许容器管理它的子级。

    例如,如果容器接收到来自 child1 的事件,则容器的职责是在适当的情况下通知其他孩子。这种方法还使得容器代码中的所有容器子项之间的基本交互非常清晰。如果我要查看某人的代码,我会很感激这种方法。

    话虽如此,您可以在 child2 和 child3 中有一个方法,允许您将 child1 作为参数传递,然后在其中为 child1 添加一个侦听器。例如:

    在容器代码中:

    child2.setChildListener(child1);
    child3.setChildListener(child1);
    

    然后在 child2 和 child3 中,你可以这样做:

    public function setChildListener(childToListenTo:MovieClip):void
    {
        childToListenTo.addEventListener(MouseEvent.CLICK, childClickedHandler);
    }
    
    private function childClickedHandler(e:MouseEvent):void
    {
        // react to the child click here
    }
    

    【讨论】:

    • 对不起原型我把这个作为答案,因为我不知道如何发布这张图片作为评论。如果我违反了规则,我很抱歉。我现在就删除。
    • 没问题,但您的回答是一个全新的问题。您要求一种方法,然后您尝试实施并遇到了一个“不同”的问题。
    • 是的,我知道我脑子里一团糟。我在下班时间的任何时候都在做这个,不睡觉,不吃饭。我想学习这该死的语言
    • 我下次会小心的。谢谢
    • 哈哈,没问题。最好将问题保留在一个简洁的问题上,因为这对在某些时候最终遇到相同问题的其他人最有帮助。
    【解决方案2】:

    首先,您需要学习如何声明自定义事件并处理它们。 您有一个来自 Adob​​e 的简单指南:http://cookbooks.adobe.com/post_AS3__Creating_and_dispatching_Custom_Events-17609.html

    您可能还想了解事件如何冒泡并在以下链接中被捕获:http://help.adobe.com/en_US/as3/mobile/WS948100b6829bd5a67edfb831266c0b5fc6-8000.html

    现在让我们来看看你问的案例:

    案例 1。从孩子 1 到孩子 2: 本质上,除非孩子 2 听到孩子 1 的事件,否则它将无法捕捉到它,因为他们没有父母关系。 您可以执行以下操作:在 Child 1 中声明一个事件并从容器中侦听和捕获它。由于从 Child 1 触发的事件,容器可以调用 Child 2 中的方法。

    案例 2。从孩子 1 到孩子 3: 与Child 1到Child 3基本相同,只是容器调用Child 2时,Child 2也调用Child 3。

    案例 3。子 3 到子 1。子 3 可以引发一个事件,该事件可以一直冒泡到容器。然后容器可以在 Child 1 中调用所需的方法。

    希望对您有所帮助。

    【讨论】:

    • 非常感谢哈维尔。我需要一点时间来了解这一切。你明白我的意思,我很高兴。再次感谢。
    • Javier 你在案例 3 中所说的“可以一直冒泡到容器的事件”是什么意思。这对我不起作用: addEventListener("FromChild3", onFromChild3);我在 Child 1 中得到了这个:dispatchEvent(new Event("FromChild3"));在孩子 3
    • 1119:通过静态类型容器的引用访问可能未定义的财产窃贼
    • Container.addEventListener("FromChild3", onFromChild3); - 什么都没发生; Container.Child2.addEventListener("FromChild3", onFromChild3); - 错误 1119
    • 如果我追踪它们:trace (Container) - return [object ContainerMc]; trace (Child2) - 返回 [object Child2Mc];跟踪 (Container.Child2) - 返回错误 1119;
    猜你喜欢
    • 2022-11-15
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 2018-02-07
    • 2013-09-15
    相关资源
    最近更新 更多