Flex MenuBar的itemClick问题

引入外部的XML作为menubar的数据源,但是点击顶级菜单失效,子菜单正常。
代码:
外部XML----menu.xml:
<?xml version= "1.0 " encoding= "utf-8 "?>
<root>
<menuitem label= "首页 " >
<menuitem label= "MenuItem C " />
<menuitem label= "MenuItem D " />
<menuitem label= "MenuItem E "
<menuitem label= "MenuItem E1 "/>
<menuitem label= "MenuItem E2 "/>
</menuitem>
</root>

组件:
<mx:XML id= "menuxml " source= "menu.xml " format= "e4x "/>
<mx:MenuBar width= "100% "
height= "24 " showRoot= "false " dataProvider= "{menuxml} "
= "@label " itemClick= "menuHandler(event) " >
</mx:MenuBar>

点击事件:
private function menuHandler(event:MenuEvent):void
{
Alert.show( "Label: " + event.item.@label, "Clicked menu item ");
}——以上是引用提问老兄的代码。
解决:
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的一些不方便的地方,而且使其具有了一定的记忆功能.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值