1

文档中说,Eve​​ntDispatcher 的 dispatchEvent “......将事件分派到事件流中”。这句话很好看,并没有真正解释任何事情。

比如说,我们有两个侦听器在等待对象“a”上的事件“A”,那么我们在调用时必须期待什么行为:

a.dispatchEvent("A")?

在从 distpatchEvent 返回之前是否会立即调用两个侦听器?或者它们会在一些内部 Flash 播放器队列中排队,并通过进入下一帧进行处理?我们可以在这里依赖 Flash 播放器的某些已定义行为还是未定义行为?应该如何阅读“将事件发送到事件流”?这个问题很重要,因为在实践中它会影响代码的控制流。

4

2 回答 2

2

这完全取决于您的显示列表层次结构。

Flash 的事件结构基于其内部事件模型

  1. 舞台将是第一个被通知的对象,然后事件将沿着显示列表向下传播,直到它到达其目标。这个阶段称为捕获阶段。要启用它,请设置useCapturetrue事件侦听器。请注意,除非侦听对象是针对事件的对象的父对象,否则这样做是没有意义的。这称为事件拦截

  2. 下一阶段是目标阶段。这是事件中最常见的行为。目标显示对象(具有事件侦听器的对象)将接收事件并执行侦听器中的代码。

  3. 最后阶段称为 冒泡阶段。这是在收到事件事件在显示列表中冒泡的时候 。事件冒泡对于调度自定义事件非常重要,因为您需要知道如何侦听由对象的子级调度的事件。

在调度事件时,我通常使用这种语法(Event.CHANGE只是一个常见的例子):

Object.dispatchEvent(new Event("CHANGE", true, false));

TheObject是您从中调度的对象。第一个参数是您要调度的事件。第二个是bubbles参数。最后是cancelable财产。Event.cancelable用于通过Event.preventDefault().

参考:

于 2011-02-13T00:57:13.023 回答
0

只需使用信号代替:P

https://github.com/robertpenner/as3-signals/wiki

不,但实际上,它们非常易于使用和理解,是对 AS3 工具箱的一个很好的补充。

您还可以通过阅读 Rob Penner 的评论(向下滚动到 wiki 页面底部)了解很多关于原生 AS3 事件的工作原理

于 2011-02-13T04:34:00.170 回答