mx:PopUpMenuButton как определить источник клика
Может быть, я пытаюсь использовать неправильный компонент для того, что я хочу сделать. У меня есть PopUpMenuButton с 2 предметами в нем. Я хочу действовать только тогда, когда пользователь выбирает элемент во всплывающем меню.
Я установил событие itemClick для выполнения необходимых действий.
Кнопка отображает меню только при нажатии на стрелку вниз, но событие itemClick срабатывает независимо от того, где нажата кнопка. Таким образом, я получаю нежелательное поведение предпринимаемых действий на основе последнего выбранного элемента без отображения меню / выбора пользователем.
Как я могу определить, произошло ли событие, потому что пользователь нажал на стрелку меню вниз или на основную часть кнопки?
Должен ли я подходить к этому по-другому?
Спасибо,
Джон
2 ответа
Если вы посмотрите на этот пример, найденный здесь, то увидите, что свойство label объекта MenuEvent доступно. Пока элементы в PopUpMenu имеют разные метки, вы можете использовать простую логику, чтобы определить, какая кнопка была нажата, как в примере.
Как насчет прослушивания всплывающего меню вместо кнопки?
шаги:
- Добавление обработчиков событий открытия / закрытия на кнопку.
- В обработчик события открытия / закрытия мы можем добавить
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>