首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Flash >

Flex:MenuBar的itemClick有关问题

2012-03-02 
Flex:MenuBar的itemClick问题引入外部的XML作为menubar的数据源,但是点击顶级菜单失效,子菜单正常。请高手

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 itemClick(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的一些不方便的地方,而且使其具有了一定的记忆功能.希望对你有所帮助.

热点排行