menuBar中itemClick的点击事件不响应
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
<s:layout>
<s:BasicLayout/>
</s:layout>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.events.MenuEvent;
[Bindable]
private var arr:ArrayCollection=new ArrayCollection([{"label":"关注图层","data":1},{"label":"属性查询","data":2},{"label":"空间查询","data":3},{"label":"周边查询","data":4},{"label":"撒点","data":5}]);
//private function opentoolQuery(n:Number):void{
//Alert.show(n.toString());
//}
private function menuHandler(event:MenuEvent):void{
Alert.show("right");
}
protected function myMenu_itemClickHandler(event:MenuEvent):void
{
Alert.show("right");
}
]]>
</fx:Script>
<mx:MenuBar id="myMenu" x="110" y="40" width="571" height="24"
dataProvider="{arr}" labelField="label"
itemClick="myMenu_itemClickHandler(event)" >
</mx:MenuBar>
</s:Application>
itemClick的点击事件为什么不响应啊?在线等-----
[解决办法]
MenuBar 控件定义包含一个或多个菜单的顶级水平菜单栏。单击顶级菜单项会打开一个弹出子菜单,该菜单是一个 Menu 控件实例。
通常,MenuBar 控件的顶级菜单栏始终可见。此控件不适合用作弹出菜单。当用户使用鼠标或键盘进行选择时,将弹出相应的子菜单。如果选择了某个菜单项,或者用户通过在菜单外单击取消了该菜单,打开的子菜单将会消失。
itemClick是监控不到menubar的顶级菜单的,itemClick只是和Menu这个类有关,而menubar只是能"CALL"出Menu 的MenuBarItem的集合.但用menubar的change侦听器能监控到点击顶级按钮的事件,不过我在FLEX3正式版测试发现点击一次 menubar的顶级按钮会出发两次change事件,如果用change事件来处理某些问题是很麻烦.
我解决该类问题的方法如下:
比如有个id为TopMenu的menubar
我用两个侦听器来监测menubar的点击时间,一个是Menu的itemClick事件还有一个是click事件.
就是说用Menu的itemClick的事件还监测子Menu的点击事件,再用click事件检测menubar的顶级菜单的点击事件.
具体:
//itemClick事件
private function menuItemClick(e:MenuEvent):void
{
trace(e.label)
}
//MouseEvent
private function doClick():void
{
//用MenuBarItem.data是否为空来判断该MenuBarItem是否有子Menu,如果有
就不触发事件,这个可以根据自己的需要来设置
if(TopMenu.selectedIndex!=-1&&MenuBarItem(TopMenu.getChildAt(TopMenu.selectedIndex+1)).data=="")
{
trace(MenuBarItem(TopMenu.getChildAt(TopMenu.selectedIndex+1)).data.@name);
//激活所有MenuBar的顶级MenuBarItem
activeMenu();
//使点过的按钮不能再点
MenuBarItem(TopMenu.getChildAt(TopMenu.selectedIndex+1)).enabled=false;
}
}
//激活所有MenuBar的顶级MenuBarItem
private function activeMenu():void
{
for each(var item:MenuBarItem in TopMenu.menuBarItems)
{
item.enabled=true;
}
}
MenuBar:
<mx:MenuBar id="TopMenu" itemClick="menuItemClick(event)" click="doClick()" showRoot="false"/>
正如上面,不仅可以解决MenuBar的一些不方便的地方,而且使其具有了一定的记忆功能.
出自: http://hi.baidu.com/onino_info/blog/item/b6aecb1bd8423fdcac6e7514.html