Flex的模块加载图表控件出现Error #1009解决之道

阅读更多
现把花了我三个小时解决的问题成果公布一下。
在做ColumnChart时,发现总出现如下异常:
1009 - Error #1009: Cannot access a property or method of a null object reference.
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at mx.charts.chartClasses::ChartBase/initStyles()
at mx.charts.chartClasses::ChartBase/set moduleFactory()
at mx.charts.chartClasses::CartesianChart/set moduleFactory()
at mx.charts::ColumnChart/set moduleFactory()

这个问题找了很久才发现只是在模块中包含该图表控件时才出现,经查ChartBase源代码发现是1862行出的错(sdk4.6),
var chartBaseStyle:CSSStyleDeclaration = styleManager.getStyleDeclaration("mx.charts.chartClasses.ChartBase");
取得chartBaseStyle为空。
此问题解决办法是,在模块主程序(Module的那个mxml)中覆盖如下方法:
override public function get moduleFactory():IFlexModuleFactory {
     return FlexGlobals.topLevelApplication.moduleFactory;
}


另外,如果如果主应用加载的模块里的图表chart的DataTip显示颜色有问题,需要在主应用(包含ModuleLoader的那个application)中预先加载下用到的Chart类,比如LineChart:
private var temp:LineChart=null;//预先加载一下linechart类,解决chart的DataTip显示颜色的flex4bug


如果在该模块中用其他spark控件使用时出现皮肤丢失问题,方便起见,可以在应用编译时增加 -keep-all-type-selectors=true参数。

你可能感兴趣的:(flex,module,chart)