actionscript-3 - flex 4 - 为什么dispatchEvent递归地触发creationComplete

标签 actionscript-3 apache-flex flex4

我有一个名为 shopView 的自定义组件,它是一个 MXML 可换肤组件。我有一个名为 ShopController 的 Controller 类,它负责在弹出窗口中显示此组件,更新组件中显示的信息等。

现在,我想在从 Controller 创建 ShopView 后创建 ShopView(creationComplete() 事件)后操作该 ShopView 的一些子组件

所以,我附加了一个事件监听器,实习生执行一些初始化过程

   creationComplete="init(event)" 

init()函数

        private function init(event:FlexEvent):void{
            event.stopImmediatePropagation();
            initMenus();
            initSlots();
            dispatchEvent(event);
        }

附加了 Controller 类中的另一个创建完成事件

     _shop.addEventListener(FlexEvent.CREATION_COMPLETE,onShopCreated);

*_shop 是 ShopView 的实例*

现在,如果您看到 init() 函数,我将停止事件传播,执行一些初始化过程,然后分派(dispatch)事件(让商店 Controller 完成其余的工作)

现在,这会使应用程序崩溃,因为 ShopView 的 crationComplete 事件被递归调用。我原以为dispatchEvent会传播到其他监听器,但看起来它正在传播回同一个组件。

我通过从 init() 函数中删除 e.stopImmediatePropagation() 和dispatchEvent(event) 行来修复它。但我想知道为什么会这样?

这是 mxml/flex 组件的已知问题吗?或者这是预期的行为?

更新:我没有在 .as 中做同样的事情,正如我下面所说的。得到答案,基本上是我的愚蠢:)

because I have not seen this behavior when I write .as classes where I stopevent propagation and dispatch the event based on business logic.

提前致谢。

最佳答案

这是预期的行为。

当您重新分派(dispatch)现有事件时,dispatchEvent 会自动克隆它(因为您无法分派(dispatch)同一事件两次。)这会清除所有与传播相关的标志。

请问为什么在这种情况下你要重新调度 CREATION_COMPLETE ?如果没有删除这两行,两个处理程序都可以正常运行。

关于actionscript-3 - flex 4 - 为什么dispatchEvent递归地触发creationComplete,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9511710/

相关文章:

java - Flex Blazeds Java 集成

java - 我们可以将文档从 Flex 上传到 Google 应用引擎 Blobstore 吗?

javascript - 对 IE 和 FF 使用 JQuery 或 onbeforeunload

apache-flex - 单独使用 actionScript 在 flex 中获取和设置应​​用程序的版本号

actionscript-3 - 项目中整个焦点元素的 Enter 按钮事件的操作脚本

java - Flex::<mx:transitions> 在我的 Flex 项目中无法正常工作?

actionscript-3 - 当外部文件中的数字更改时播放声音

android - 从 ActionScript 获取对 android 通知服务的访问权限

apache-flex - 在 Spark 按钮皮肤上添加图标

xml - FLEX 数据网格和 XML 列表内容