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对象显示的内部函数,直接覆盖重写会造成严重错误。解决方法是:改名原函数,并在重写时调用之。示例代码如下:
自我介绍:百度厂基础平台车间的一名挨踢民工。擅长C++、算法、语言设计、分布式计算,也用过Java,Python, PHP,JS/AS等语言开发。请关注我的twitter (免翻墙版)