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>

但是,如果我在其中一个子视图中调用“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 回答