Flex: Запомните индекс и имя вкладки на PopUpButton SuperTabNavigator - PullRequest
2 голосов
/ 21 декабря 2011

Как все мы знаем, SuperTabNavigator - это компонент с открытым исходным кодом от flexLib, который дает преимущество перед Flex Tab Navigator, заключающееся в том, что мы можем закрывать вкладки с помощью кнопки закрытия на каждой вкладке с помощью SuperTabNavigator. Кроме того, есть кнопка справа от навигатора вкладок, которая показывает список всех вкладок, которые открыты одновременно, и мы можем выбрать любую вкладку из этой кнопки, которая является PopupButton. Теперь, когда мы закрываем вкладку, она также исчезает из выпадающего списка PopupButton. Но в моем случае я хочу, чтобы раскрывающийся список запоминал закрытые вкладки, даже когда я нажимаю на эту закрытую вкладку, она снова открывается в навигаторе вкладок. Я относительно новичок в Flex и ActionScipt и буду очень признателен за любую помощь от всех ваших опытных программистов, учебник или просто подсказку. Я обещаю, что буду хорошо документировать это в Интернете для моих собратьев по программированию. :)

Заранее спасибо.

1 Ответ

0 голосов
/ 26 февраля 2012

Хорошо, я не использовал навигатор супер вкладок раньше, но у меня была попытка настроить проект, который отслеживал все закрытые вкладки и давал пользователю возможность открыть их позже, если они захотят.

Я не мог понять, как заставить небольшое выпадающее меню запоминать закрытые вкладки, не влияя на фактические видимые вкладки. Итак, в качестве обходного пути, вот небольшое простое приложение, использующее 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>
...