mx:PopUpMenuButton как определить источник клика

Может быть, я пытаюсь использовать неправильный компонент для того, что я хочу сделать. У меня есть PopUpMenuButton с 2 предметами в нем. Я хочу действовать только тогда, когда пользователь выбирает элемент во всплывающем меню.

Я установил событие itemClick для выполнения необходимых действий.

Кнопка отображает меню только при нажатии на стрелку вниз, но событие itemClick срабатывает независимо от того, где нажата кнопка. Таким образом, я получаю нежелательное поведение предпринимаемых действий на основе последнего выбранного элемента без отображения меню / выбора пользователем.

Как я могу определить, произошло ли событие, потому что пользователь нажал на стрелку меню вниз или на основную часть кнопки?

Должен ли я подходить к этому по-другому?

Спасибо,

Джон

2 ответа

Если вы посмотрите на этот пример, найденный здесь, то увидите, что свойство label объекта MenuEvent доступно. Пока элементы в PopUpMenu имеют разные метки, вы можете использовать простую логику, чтобы определить, какая кнопка была нажата, как в примере.

Как насчет прослушивания всплывающего меню вместо кнопки?

шаги:

  1. Добавление обработчиков событий открытия / закрытия на кнопку.
  2. В обработчик события открытия / закрытия мы можем добавить ITEM_CLICK событие в экземпляре popping, который является меню точно.

Код:

<fx:Script>
    <![CDATA[
        import mx.events.DropdownEvent;
        import mx.events.MenuEvent;

        protected function pmb_openHandler(event:DropdownEvent):void
        {
            pmb.popUp.addEventListener(MenuEvent.ITEM_CLICK,onMenuItemClick);
        }

        protected function pmb_closeHandler(event:DropdownEvent):void
        {
            pmb.popUp.removeEventListener(MenuEvent.ITEM_CLICK,onMenuItemClick);
        }

        private function onMenuItemClick(event:MenuEvent):void
        {
            trace(">>>onMenuItemClick on Menu : ", event.item.@label);  
        }

    ]]>
</fx:Script>
<fx:Declarations>
    <!-- A an data provider in E4X format. -->
    <fx:XMLList id="treeDP2">
        <node label="Inbox"/>
        <node label="Calendar"/>
        <node label="Deleted Items"/>
    </fx:XMLList>
</fx:Declarations>

<mx:HBox>
    <mx:PopUpMenuButton 
        id="pmb"
        dataProvider="{treeDP2}"
        labelField="@label"
        open="pmb_openHandler(event)"
        close="pmb_closeHandler(event)"
        />
</mx:HBox>
Другие вопросы по тегам