posts - 274,  comments - 1258,  trackbacks - 0

  Flash MX 20004 pro 的V2.0控件中的MenuBar,使用方便,功能强大,只要轻轻地喂它一个xml文档,它就能够自动生成任意多级的菜单,确实很讨人喜欢,似乎是做网页导航栏、导航菜单的不二选择。但是MenuBar也有个致使的弱点:它除了从UIObject和UIComponent里继承过来的事件外自己没有定义任何的事件!也就是说,当你单击MenuBar上面的项时,它没有发出任何事件!
  怎么办呢?在网上狂搜了一下解决办法,发现提出这个问题不少,但回答却是一个也没有,看来怎能自己动手解决了。
  经过整晚的测试、调试、查阅代码,最终在查阅MenuBar的源代码时取得了重大进展——当MenuBar上的项被单击时,其包含的MenuBarItem类对象会发生onRelease事件!然而,那种对象被保存在一个叫“__menuBarItems”的数组中,比较难以调用(我想你也不希望代码里面出现一堆以“__”开头的标识符吧)。再深入地查阅又发现,那个MenuBarItem.onRelease()函数默认会调用MenuBar.onItemRelease()来向其报告,从而更新其辖下的Menu对象。于是,解决办法便相当明了了——重写onItemRelease函数~
  但是,使用onItemRelease与我们常见的事件处理方法很不同,它并非一个真正的组件事件,所以不能用addEventListener()来注册侦听器;它也与Button的onRelease等事件有所不同:后者的默认值是undefined,重写之不会带来任何副作用,而onItemRelease()是一个掌管Menu对象显示的内部函数,直接覆盖重写会造成严重错误。解决方法是:改名原函数,并在重写时调用之。示例代码如下:

menuBar.dataProvider = new  XML( " <menu><item label=\ " 第一项\ " /><<item label=\ " 第二项\ " /></menu> " ).firstChild;
// 改名原函数
menuBar._onItemRelease = menuBar.onItemRelease;
// 重写onItemRelease方法
menuBar.onItemRelease = function(index:Number) {
    _onItemRelease(index);
    textInput.text
= " Item  " + index + "  was clicked " ; // 这里可以加上你的事件处理函数
}

效果如下:

至此,便大功告成了~~是不是很简单?相信聪明的你一定能够举一反三,对类似的“内部事件”进行响应了

P.S.:后来又在google和baidu上搜索了onItemRelease,结果为零~看来我有可能成为中文Flash界第一个发现此方法的人哦~~嘻嘻
posted on 2007-01-25 13:19 踏雪赤兔 阅读(1181) 评论(5)  编辑 收藏 引用 所属分类: 玩转编程

FeedBack:
# re: [AS]用MenuBar控件来制作网页导航栏!
2007-01-25 13:59 | 无银闯天涯
不错不错,继续发表哦。偶还在学习之中,请你们以后多多的指教指教。~!  回复  更多评论
  
# re: [AS]用MenuBar控件来制作网页导航栏!
2007-01-25 14:01 | _Kenn
学习了,以后不懂可以请教你了。  回复  更多评论
  
# re: [AS]用MenuBar控件来制作网页导航栏!
2007-01-26 13:05 | Optimistic
我高中时也喜欢Flash的制作
但是最AS研究不深 呵呵~~
  回复  更多评论
  
# re: [AS]用MenuBar控件来制作网页导航栏!
2007-01-26 23:09 | Flash动画
期待更多  回复  更多评论
  
# re: [AS]用MenuBar控件来制作网页导航栏!
2008-07-26 19:47 | nm
我看见牛在天上飞,原来是你在地上吹。
英文的东西多的是,看的中国人也不在少数。
要使主菜单有响应,既然知道那个__的属性了,就该知道,它是个数组,什么数组啊?主菜单项(一级菜单)项的数组。你测试就可以知道,得到的主菜单名称是这样的:
_level0.my_menu.mbItem200
_level0.my_menu.mbItem201
...
这样的。任何一个menubar都是这样的。
有了这个就够了啊,
_level0.my_menu.mbItem203.onRelease=function(){
getUrl("http://baidu.com")
}
  回复  更多评论
  
只有注册用户登录后才能发表评论。

百度空间| 见闻日记| 编程感悟
我的twitter


LOGO

自我介绍:百度厂基础平台车间的一名挨踢民工。擅长C++、算法、语言设计、分布式计算,也用过Java,Python, PHP,JS/AS等语言开发。请关注我的twitter (免翻墙版) 发QQ消息


添加到收藏夹 Locations of visitors to this page

常用链接

随笔分类(300)

随笔档案(274)

文章分类(38)

相册

收藏夹(54)

与博主互动

博客手拉手

搜索

  •  

积分与排名

  • 积分 - 399490
  • 排名 - 10

最新评论

阅读排行榜

评论排行榜