gpt4 book ai didi

actionscript-3 - 在模型(MVC)AS3 中调用 dispatchEvent 时 addEventListener 不起作用

转载 作者:行者123 更新时间:2023-12-04 06:37:43 24 4
gpt4 key购买 nike

我有一个问题,我在正确分派(dispatch)的模型类中分派(dispatch)了一个事件。当试图在客户端听这个时,什么都听不到。 Client.as 实例化所有 MVC 元素,例如:

var _biosModel:IMultiDataModel = new BiosPanelModel();

用户单击会调用“BiosPanelModel.as”中的“更新”方法,如下所示:
override public function update():void
{
debug("[BiosPanelModel.update]");
dispatchEvent(new Event(Event.CHANGE)); // dispatch event
}

Client.as 然后尝试收听这个分派(dispatch)的事件,但没有,我不知道为什么!?像这样:
this._biosModel.addEventListener(Event.CHANGE, eventHandler);

eventHandler 没有被调用!

希望有人可以帮助我,因为我觉得这应该很简单! :-(

谢谢阅读

克里斯

最佳答案

我将首先尝试设置 bubbles参数为真。因此,像这样发送事件:

dispatchEvent(new Event(Event.CHANGE, true));

这将使您不必在调度程序上显式地监听事件,并允许在冒泡阶段捕获事件。

编辑
这个 不是 最终,全部答案...一旦您使其正常工作,您可能希望删除气泡 = True,除非您想在捕获事件后明确取消该事件。原因是 Event.CHANGE 事件是一个非常常见的事件,并且在显示列表链中将该事件冒泡可能会很困惑,特别是如果有其他处理程序正在监听 CHANGE 事件。但是,它会让你知道你是否正确地附加了你的听众。
结束编辑

您可能想要尝试的另一件事(因为从您上面编写代码的方式来看并不明显)是在创建实例后立即添加事件监听器。此外,请确保您的 _biosModel 是一个实例属性,而不是在生成它的某些函数的范围内定义。
package ... {

import flash.events.Event;

public class Something extends SomethingElse {

var _biosModel:IMultiDataModel;

public function Something() {
this._biosModel = new BiosPanelModel();
this._biosModel.addEventListener(Event.CHANGE, __eventHandler);
}

private function __eventHandler($evt:Event) {
trace("SUCCESS");
}
}
}

关于actionscript-3 - 在模型(MVC)AS3 中调用 dispatchEvent 时 addEventListener 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4660685/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com