mx:PopUpMenuButton如何确定点击源

时间:2013-12-29 22:06:06

标签: actionscript-3 flex flex4 flash-builder popupmenubutton

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

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

按钮仅在单击向下箭头时显示菜单,但无论单击按钮的位置如何,都会触发itemClick事件。所以我根据最后选择的项目获取了不需要的操作行为,而没有用户显示/选择菜单。

如何判断事件是否发生是因为用户点击了菜单向下箭头或按钮的主要部分?

我应该以不同的方式接近这个吗?

谢谢,

约翰

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

如何听取弹出菜单实例而不是按钮?

步骤:

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

    <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>