Как определить, когда управление становится видимым в первый раз? - PullRequest
1 голос
/ 07 июня 2011

У меня есть всплывающее окно, которое содержит элемент управления TabNavigator. Вкладки динамически добавляются в TabNavigator при загрузке всплывающего окна. Есть ли хороший способ узнать, когда загружена одна из вкладок, из самой вкладки?

У меня есть вкладка, требующая вызова службы, и я не хочу, чтобы вызов службы выполнялся, если пользователь фактически не щелкнет вкладку, чтобы просмотреть ее. Я мог бы уведомлять вкладку от самого всплывающего элемента управления, когда индекс TabNavigator был изменен, но это не похоже на хороший способ сделать это. Мне интересно, есть ли событие или что-то, к чему я мог бы подключиться, что позволило бы мне знать, что вкладка должна быть отображена в первый раз (из самого элемента управления вкладками). Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 07 июня 2011

Я думаю, что не совсем понял вопрос, поэтому я пытаюсь снова. Я думаю, что этот код решит вашу проблему.

Хитрость в том, чтобы установить для политики создания значение "none" для компонента. Flex создаст вкладку, но не сам компонент.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="onCreationComplete()" layout="vertical" minWidth="955" minHeight="600">
<mx:TextArea id="log" width="100%" height="500"/>

<mx:Script>
    <![CDATA[
        import mx.containers.Canvas;
        import mx.events.FlexEvent;
        private function onCreationComplete():void{
            var canv:Canvas = new Canvas();
            canv.label = "One";
            canv.addEventListener(FlexEvent.CREATION_COMPLETE,onCreateTab);
            canv.creationPolicy="none";
            tn.addChild(canv);
            canv = new Canvas();
            canv.label = "Two";
            canv.addEventListener(FlexEvent.CREATION_COMPLETE,onCreateTab);
            canv.creationPolicy="none";
            tn.addChild(canv);
            canv = new Canvas();
            canv.label = "Three";
            canv.addEventListener(FlexEvent.CREATION_COMPLETE,onCreateTab);
            canv.creationPolicy="none";
            tn.addChild(canv);
        }

        private function onCreateTab(event:Event):void{
            log.text+=event.currentTarget.label+ " created for the very first time\n";
        }
    ]]>
</mx:Script>    
<mx:TabNavigator id="tn" width="500"/>
</mx:Application>
1 голос
/ 07 июня 2011

Есть событие под названием «FlexEvent.SHOW», которое должно работать для вас. Смотри: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/events/FlexEvent.html#SHOW

Вы можете поместить это в TabNavigator. т.е.

<mx:TabNavigator>
   <comp:SomeComp show="doSomething()" label="My Tab"/>
</mx:TabNavigator>

Или вы можете поместить его в свой компонент. т.е.

<mx:Canvas show="doSomething">
<!-- My Component-->
</mx:Canvas>

Если вы установили политику создания, вы также можете сделать это при creationComplete, но это произойдет только в ПЕРВЫЙ раз, когда будет создана вкладка.

Пример выполнения:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" minWidth="955" minHeight="600">
    <mx:TextArea id="log" width="100%" height="500">

    </mx:TextArea>
    <mx:TabNavigator width="500">
        <mx:Canvas label="One" show="{log.text+='One Clicked\n';}"/>
        <mx:Canvas label="Two" show="{log.text+='Two Clicked\n';}"/>
        <mx:Canvas label="Three" show="{log.text+='Three Clicked\n';}"/>
        <mx:Canvas label="Four" show="{log.text+='Four Clicked\n';}"/>
    </mx:TabNavigator>
</mx:Application>

С динамическими вкладками.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="cc()" layout="vertical" minWidth="955" minHeight="600">
<mx:TextArea id="log" width="100%" height="500">

</mx:TextArea>

<mx:Script>
    <![CDATA[
        import mx.containers.Canvas;
        import mx.events.FlexEvent;
        private function cc():void{
            var canv:Canvas = new Canvas();
            canv.label = "One";
            canv.addEventListener(FlexEvent.SHOW,onShow);
            tn.addChild(canv);
            canv = new Canvas();
            canv.label = "Two";
            canv.addEventListener(FlexEvent.SHOW,onShow);
            tn.addChild(canv);
        }

        private function onShow(event:Event):void{
            log.text+=event.currentTarget.label+ " clicked\n";
        }
    ]]>
</mx:Script>

<mx:TabNavigator id="tn" width="500">
</mx:TabNavigator>
</mx:Application>
0 голосов
/ 07 июня 2011

Читайте о Flex Component LifeCycle .Исходя из того, что вы описываете, я бы, вероятно, прослушал событие creationComplete для содержимого вкладки.

...