1

ネストされた TabbedViewNavigator (ビュー内) を実装しようとしています。この投稿で説明されている方法 3 に従ってこれを行いました。

Flex - タブ付きパネルの作り方

ここにコード:

<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" title="HomeView">

<s:TabbedViewNavigator width="100%" height="100%">
    <s:ViewNavigator label="1st Tab" width="100%" height="100%" 
                     firstView="views.FirstTabView"/>
    <s:ViewNavigator label="2nd Tab" width="100%" height="100%" 
                     firstView="views.SecondTabView"/>
    <s:ViewNavigator label="3rd Tab" width="100%" height="100%" 
                     firstView="views.ThirdTabView"/>
</s:TabbedViewNavigator>

ただし、子ビューの 1 つで "navigator.pushView(someView)" を呼び出すと (FirstTabView としましょう)、新しいビューは、親のビュー ナビゲーターではなく、ネストされた TabbedViewNavigator にプッシュされます。それは私が望むものではありません。アプリケーションの状態を完全に変更して、新しいビューを表示したい。どうすればそれを達成できますか?ネストされた TabbedViewNavigator 内の変更を (メイン ビューで) リッスンし、そこから新しいビューをプッシュする必要がありますか? それとも、これを別の方法で行う必要がありますか?

4

1 に答える 1

0

カスタムイベントを使用して解決しました(データを取得する必要があるため、カスタムです)。

TabbedViewNavigator にリスナーとハンドラーを追加しました。イベントは、アクティブな ViewNavigator ビュー内から送出されます。イベントには、イベント チェーンの一番上まで行くように、bubbles=true があります。次に、イベント ハンドラーで新しいビューをプッシュするだけです。

メイン ビュー:

    <s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" title="HomeView">

         (...)

         private function setup(){
              tabbed_panel.addEventListener(CustomEvent.BUTTON_PRESSED, eventHandler); 
         }

         private function eventHandler(ev:CustomEvent):void{
             navigator.pushView(MyNewView,ev.event_data);
         }

         (...)


         <s:TabbedViewNavigator id="tabbed_panel" width="100%" height="100%">
             <s:ViewNavigator label="1st Tab" width="100%" height="100%" 
                 firstView="views.FirstTabView"/>
             <s:ViewNavigator label="2nd Tab" width="100%" height="100%" 
                 firstView="views.SecondTabView"/>
         </s:TabbedViewNavigator>

        (...)
    </s:View>

最初のタブ ビュー:

    <View...>

         (...)

         private function buttonClickedHandler(event:Event):void{
             dispatchEvent(new CustomEvent(event_data,"BUTTON_PRESSED",true));
         }

         (...)

    </View>

これが問題に対する正しいアプローチであるかどうかはわかりませんが、機能します。

于 2012-10-18T16:13:18.097 に答える