Flex 中的ChartItemEvent 与TabNavigator的IndexChangeEvent异常

主要是代码结构如下:

<mx:TabNavigator change="tabChanged(event)">
          <s:NavigatorContent >

                <mx:ColumnChart selectionMode="single" itemRollOverColor="green" showDataTips="true">

                .....         ......

               <mx:ColumnChart >

         </s:NavigatorContent >

</mx:TabNavigator>

---------------------------------------------------------------------------------------

tabChanged函数声明如下

public function tabChanged(event:IndexChangedEvent):void
 {

}

 

TypeError: Error #1034: 强制转换类型失败:无法将 mx.charts.events::ChartItemEvent@5e19fa51 转换为 mx.events.IndexChangedEvent。
 at flash.events::EventDispatcher/dispatchEventFunction()
 at flash.events::EventDispatcher/dispatchEvent()
 at mx.core::UIComponent/dispatchEvent()
 at mx.charts.chartClasses::ChartBase/http://www.adobe.com/2006/flex/mx/internal::selectItem()
 at mx.charts.chartClasses::ChartBase/processRollEvents()
 at mx.charts.chartClasses::ChartBase/mouseDownHandler()
 at flash.events::EventDispatcher/dispatchEventFunction()
 at flash.events::EventDispatcher/dispatchEvent()
 at mx.core::UIComponent/dispatchEvent()
 at mx.managers::SystemManager/mouseEventHandler()[E:\dev\4.y\frameworks\projects\framework\src\mx\managers\SystemManager.as:2918]

 

分析原因就是因为外面的容器(TabNavigator )已经监听了一个事件(IndexChangedEvent),所以里面的另一个组件(<mx:ColumnChart> selectionMode="single" )也会引起改变事件(ChartItemEvent),就是选择当前的柱状块,两者的事件类型是不一样,而且不能强制转换,所以报错了,查了一个Flex官网API:

 

 

Packagemx.events
Classpublic  class  IndexChangedEvent
InheritanceIndexChangedEvent  Inheritance Event Inheritance Object

 

Packagemx.charts.events
Classpublic  class  ChartItemEvent
InheritanceChartItemEvent  Inheritance MouseEvent Inheritance Event Inheritance Object

 

 

 

IndexChangedEvent主要是直接继承自Event,而ChartItemEvent继承自MouseEvent,然后再继承自Event,所以:可以考虑把函数中的IndexChangedEvent换成Event,把change="tabChanged(event)",换成tabIndexChange="tabChanged(event)"

public function tabChanged(event:Event):void
 {

}

<mx:TabNavigator tabIndexchange="tabChanged(event)">

这样无论什么事件都能转型成Event,剩下的事情,让Flex API自己完成吧!!

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值