是否有一个事件在屏幕上不再显示组件时触发?

时间:2011-01-21 15:48:54

标签: flex actionscript-3 actionscript flex3

我有一个我开发的自定义组件,它是仪表板的一部分。

它基于作为组件一部分的计时器进行一些轮询。

当用户离开包含此组件的视图时,我想停止计时器,从而停止轮询。

我可以在视图发生变化时触发事件并在组件中捕获它,但我希望有可能在组件中包含所有内容。

在触发的组件中是否存在事件或状态更改,甚至当前是否显示组件?

提前感谢您的任何帮助或建议!

示例:

                                  

        ]]>
        </mx:Script>

        <mx:TabBar x="10" y="10" dataProvider="viewstack1">
        </mx:TabBar>

        <mx:ViewStack x="0" y="0" id="viewstack1" width="675" height="315">
                <mx:Canvas label="View 1" width="100%" height="100%">
                        <mx:Button x="74" y="69" label="Button 1" width="429" height="185" removedFromStage="removeFromStageEvent()"/>
                </mx:Canvas>
                <mx:Canvas label="View 2" width="100%" height="100%">
                        <mx:Button x="74" y="69" label="Button 2" width="429" height="185" color="red"/>
                </mx:Canvas>        
        </mx:ViewStack>

</mx:Application>

3 个答案:

答案 0 :(得分:3)

当一个组件即将从舞台上移除时,会触发

removedFromStage

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/events/Event.html?filter_flex=4.1&filter_flashplayer=10.1&filter_air=2#REMOVED_FROM_STAGE

  

在显示对象即将从显示列表中删除时调度,直接或通过删除包含显示对象的子树。 DisplayObjectContainer类的两个方法生成此事件:removeChild()和removeChildAt()。

答案 1 :(得分:0)

修改 如果您要确定用户何时在View 1View 2ViewStack之间切换,您可以向viewstack1 change添加事件监听器事件。

<fx:Script>
  <![CDATA[

    protected function viewstack1_changeHandler(event:IndexChangedEvent):void
    {
      // Do Something
    }

  ]]>
</fx:Script>

<mx:TabBar x="10" y="10" dataProvider="viewstack1" />

<mx:ViewStack x="0" y="0" id="viewstack1" width="675" height="315" change="viewstack1_changeHandler(event);">
  <mx:Canvas label="View 1" width="100%" height="100%">
    <mx:Button x="74" y="69" label="Button 1" width="429" height="185" />
  </mx:Canvas>
  <mx:Canvas label="View 2" width="100%" height="100%">
    <mx:Button x="74" y="69" label="Button 2" width="429" height="185" color="red"/>
  </mx:Canvas>        
</mx:ViewStack>

如果您使用组件的visible属性来确定它是否显示,您还可以在组件中使用hide事件处理程序。

<local:MyComponent hide="hideHandler(event)">
  <fx:Script>
    <![CDATA[

    protected function hideHandler(event:FlexEvent):void
    {
      // Do something here.
    }

    ]]>
  </fx:Script>
</local:MyComponent>

答案 2 :(得分:0)

您可以将focus events与不可见精灵的命中测试结合使用,该精灵涵盖整个阶段和/或视图/组件可见性(可能需要这些精灵链)。