Есть ли событие, которое запускается, когда компонент больше не отображается на экране? - PullRequest
4 голосов
/ 21 января 2011

У меня есть собственный компонент, который я разработал и который является частью панели инструментов.

Опрашивает на основе таймера, который является частью компонента.

Когда пользователь уходит от представления, содержащего этот компонент, я хотел бы остановить таймер и, следовательно, остановить опрос.

Я, очевидно, могу вызвать событие, когда представление изменилось, и поймать его внутри компонента, но я надеялся, что может быть способ сохранить все это внутри компонента.

Есть ли событие или изменение состояния внутри компонента, которое срабатывает и даже когда компонент отображается в данный момент?

Заранее спасибо за любую помощь или предложения!

Пример:

        ]]>
        </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 ]

3 голосов
/ 21 января 2011

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 ().

0 голосов
/ 21 января 2011

Вы можете использовать события фокуса в сочетании с тестом попадания невидимого спрайта, который охватывает всю стадию и / или видимость вида / компонента (может потребоваться их цепочка).

0 голосов
/ 21 января 2011

EDIT: Если вы пытаетесь определить, когда пользователь переключается между View 1 и View 2 в вашем ViewStack, вы можете добавить прослушиватель событий для viewstack1 s 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>
...