0

也许我正在尝试使用错误的组件来做我想做的事情。我有一个包含 2 个项目的 PopUpMenuButton。我只想在用户选择弹出菜单中的项目时采取行动。

我已设置 itemClick 事件以执行必要的操作。

该按钮仅在单击向下箭头时显示菜单,但无论在何处单击按钮,都会触发 itemClick 事件。所以我得到了基于最后一个选择的项目而没有用户显示/选择菜单的不需要的操作行为。

如何区分事件发生是因为用户单击了菜单向下箭头还是按钮的主要部分?

我应该以不同的方式处理这个问题吗?

谢谢,

约翰

4

2 回答 2

0

听弹出菜单实例而不是按钮怎么样?

脚步:

  1. 在按钮上添加打开/关闭事件处理程序。
  2. 在打开/关闭事件处理程序中,我们可以ITEM_CLICK在弹出的实例上添加事件,这正是菜单。

代码:

<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>
于 2014-01-06T14:58:19.230 回答
0

如果您查看此处找到的这个示例,您可以看到 MenuEvent 的 label 属性是可访问的。只要 PopUpMenu 中的项目具有不同的标签,您就可以使用一些简单的逻辑来确定单击了哪个按钮,就像示例中一样。

于 2013-12-30T22:43:50.533 回答