Flex:记住SuperTabNavigator的PopUpButton上的选项卡索引和名称

时间:2011-12-20 22:56:35

标签: actionscript-3 flex flex4 flex3 flex4.5

众所周知,SuperTabNavigator是flexLib的一个开源组件,它比Flex Tab Navigator更具优势,我们可以使用SuperTabNavigator从每个选项卡上的关闭按钮关闭选项卡。另外,选项卡导航器右侧有一个按钮,显示一次打开的所有选项卡的列表,我们可以从该按钮选择任何选项卡,即PopupButton。 现在发生的事情是当我们关闭一个标签时,它也会从PopupButton下拉列表中消失。但在我的情况下,我希望下拉列表能够记住已关闭的标签,以便当我点击该关闭的标签页时,它会再次在标签导航器中打开。 我是Flex和ActionScipt的新手,非常感谢所有经验丰富的编码员的帮助,教程或提示。我保证我会在网上为我的同伴弹性编码器做好记录。 :)

提前致谢。

1 个答案:

答案 0 :(得分:0)

好的我之前没有使用过超级标签导航器,但是我设置了一个跟踪任何已关闭标签的项目,并让用户可以选择以后再重新打开它们。 / p>

我无法弄清楚如何让小下拉菜单记住关闭的标签而不影响可见的实际标签。所以作为一个解决方案,这里有一个使用Flex SDK 3.6的小型简单应用程序,我希望你发现它很有用,它应该按原样运行...

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" minWidth="955" minHeight="600" xmlns:ns="http://code.google.com/p/flexlib/">
    <mx:VBox>
        <ns:SuperTabNavigator id="navigator"
                              width="500"
                              height="500"
                              tabClose="recordClosedTab(event)"
                              creationComplete="init()">
            <mx:Canvas label="one"/>
            <mx:Canvas label="two"/>
            <mx:Canvas label="three"/>
        </ns:SuperTabNavigator>
        <mx:HBox>
            <mx:Label text="Closed tabs:"/>
            <mx:ComboBox id="closedTabsMenu"
                         close="closedTabsMenuCloseHandler(event)"/>
        </mx:HBox>
    </mx:VBox>

    <mx:Script>
        <![CDATA[
            import flexlib.events.SuperTabEvent;

            import mx.collections.ArrayCollection;
            import mx.containers.Canvas;
            import mx.events.DropdownEvent;

            private var _closedTabs:ArrayCollection = new ArrayCollection();

            /**
             * Records which display object has been removed from the SupreTabNavigator.
             * Updates closed tabs menu data provider.
             * 
             * @param SuperTabEvent.TAB_CLOSE dispatched from SuperTabNavigator when a tab close button is clicked.
             * */
            private function recordClosedTab(event:SuperTabEvent):void{
                _closedTabs.addItem(navigator.getChildAt(event.tabIndex) as DisplayObject);
                closedTabsMenu.dataProvider = _closedTabs;
            }

            /**
             * Handles the close event dispatched from combo box on close.
             * Checks if the SuperTabNavigator contains the item currently selected in combo box.
             * If not then adds that object if it is a DisplayObject
             * Then removes that item from combo box.
             * 
             * @param DropdownEvent.CLOSE dispatched from the ComboBox on close
             * */
            private function closedTabsMenuCloseHandler(event:DropdownEvent):void{
                var tabs:ArrayCollection = new ArrayCollection(navigator.getChildren());
                if (!tabs.contains(closedTabsMenu.selectedItem)){
                    if (closedTabsMenu.selectedItem is DisplayObject){
                        navigator.addChild(closedTabsMenu.selectedItem as DisplayObject);
                        _closedTabs.removeItemAt(_closedTabs.getItemIndex(closedTabsMenu.selectedItem));
                    }
                }
            }

        ]]>
    </mx:Script>
</mx:Application>