我有一个flex应用程序,这个应用程序的显示是用很多容器构建的。 我在每个displayObjects上都有一个FlexEvent.UPDATE_COMPLETE。
我想要完成什么? 我想只在它发生的顶层处理事件,例如,如果我有一个网格并且更新发生在某个内部的标签中,我想只在Grid上处理事件。
有没有办法实现这个目标?
只是为了强调,我在编译时没有任何显示对象的知识,只是在运行时,显示器是动态构建的我不能只在网格上写代码,我必须以某种方式检查如果事件发生在更高级别。
我会喜欢这个问题的一些帮助,即使它不是代码,而是如何处理这个独特问题的概念。
由于
答案 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
并忽略它是否不是您要查找的内容。甚至更好:听取顶级组件上的事件,并忽略target
和currentTarget
不匹配。
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)