flex as3中的事件控制(事件顺序)

时间:2010-06-29 10:23:17

标签: flex actionscript-3 flex3

我有一个flex应用程序,这个应用程序的显示是用很多容器构建的。 我在每个displayObjects上都有一个FlexEvent.UPDATE_COMPLETE。

我想要完成什么? 我想只在它发生的顶层处理事件,例如,如果我有一个网格并且更新发生在某个内部的标签中,我想只在Grid上处理事件。

有没有办法实现这个目标?

只是为了强调,我在编译时没有任何显示对象的知识,只是在运行时,显示器是动态构建的我不能只在网格上写代码,我必须以某种方式检查如果事件发生在更高级别。

我会喜欢这个问题的一些帮助,即使它不是代码,而是如何处理这个独特问题的概念。

由于

2 个答案:

答案 0 :(得分:0)

在处理完该事件后,您是否考虑过对事件的stopPropagation()/ stopImmediatePropagation()。

实施例: 由于你的按钮在画布上。 canvas中的事件处理程序方法如下所示,

function handleEvent(e:FlexEvent):void {
 trace("In Canvas's handler");
 //do your events...
 e.stopPropagation(); //This stops from propagating e to its parent containers, which is an HBOX. The container can be anything at runtime, it doesnt affect the propagation.

}

也可以在其他容器中尝试相同的示例。

这里有一些例子,

http://livedocs.adobe.com/flex/3/html/help.html?content=events_08.html

http://livedocs.adobe.com/flex/3/langref/flash/events/Event.html#stopPropagation%28%29

答案 1 :(得分:0)

只需检查event.target并忽略它是否不是您要查找的内容。甚至更好:听取顶级组件上的事件,并忽略targetcurrentTarget不匹配。

if(event.target != event.currentTarget) 
    return;

如果您也不能这样做,请检查父母:如果父是您的应用程序,或者是包含顶级项目的容器,则它是顶级项目。根据组件的结构,它可以是

if(event.target.parent == this)
//or
if(event.target.parent == this.theContainer_thatHolds_topLevelItems)
//or 
if(event.target.parent is Application)
//or 
if(event.target.parent is CustomContainerClassName)