【问题标题】:mx:PopUpMenuButton how to determine the source of a clickmx:PopUpMenuButton 如何判断点击的来源
【发布时间】:2013-12-29 22:06:05
【问题描述】:

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

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

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

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

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

谢谢,

约翰

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我正在使用 label 属性,可以判断点击了哪个项目。我想不通的是如何判断用户是否真的选择了菜单中的一个项目。如果他们单击按钮的主要部分,菜单不会弹出,但 itemClick 事件仍会触发。我想忽略这个点击。我看不出标签属性有什么帮助,尤其是在我的情况下,因为我不让标签改变。它始终显示“默认导出...”,而菜单显示可用的导出类型。选择类型时,将为用户设置导出类型,标签重置为“默认导出...”。 span>
    【解决方案2】:

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

    步骤:

    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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-26
      • 1970-01-01
      • 2017-11-20
      • 2015-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多