【问题标题】:Event control in flex as3 (order of events)flex as3 中的事件控制(事件顺序)
【发布时间】:2010-06-29 10:23:16
【问题描述】:

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

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

有没有办法做到这一点?

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

我希望在这个问题上得到一些帮助,即使它不是代码而是如何处理这个独特问题的概念。

谢谢

【问题讨论】:

    标签: apache-flex actionscript-3 flex3


    【解决方案1】:

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

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

    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

    【讨论】:

    • 我知道这些,他们怎么能在这里帮助我?我举个例子,我有一个按钮,它包含在一个画布中,并且这个画布在一个 HBOX 中(同样,我在编译时没有这方面的知识,只在运行时)一旦事件被触发,它会在按钮和 Canvas 上触发,但不在 HBox 上触发,我只想在 Canvas 上处理此事件一次。
    • 编辑了我的答案,问题只是为了停止事件传播。
    • 父母可能依赖孩子的 updateComplete 事件 - 这可能会破坏某些东西...必须检查 Flex 组件实例化生命周期以确认。
    【解决方案2】:

    只需检查 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-27
      相关资源
      最近更新 更多