1

TabNavigatorコントロールを含むポップアップがあります。ポップアップが読み込まれると、タブはTabNavigatorに動的に追加されます。タブ自体から、タブの1つがいつロードされたかを知る良い方法はありますか?

サービス呼び出しを行う必要があるタブがあり、ユーザーが実際にタブをクリックして表示しない限り、サービス呼び出しを行わないようにします。TabNavigatorのインデックスが変更されたときに、ポップアップコントロール自体からタブに通知することはできましたが、それを行うには良い方法ではないようです。(タブコントロール自体の中から)初めてタブをレンダリングする必要があることを私に知らせるイベントまたは私がフックできる何かがあるかどうか疑問に思っています。前もって感謝します!

4

3 に答える 3

2

よくわからなかったので、やり直します。このコードはあなたの問題に対処すると思います。

秘訣は、コンポーネントの作成ポリシーを「なし」に設定することです。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>
于 2011-06-07T15:13:29.887 に答える
1

「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>
于 2011-06-07T13:39:08.200 に答える
0

Flexコンポーネントのライフサイクルを確認してください。あなたの説明に基づいて、私はおそらくタブのコンテンツでcreationCompleteイベントをリッスンします。

于 2011-06-07T13:48:40.083 に答える