FlexViewer Module 图表控件 Error #1009

来源:互联网 发布:php 流媒体 编辑:程序博客网 时间:2024/05/29 07:27

用FlexViewer 框架 做图形统计时,总是出错

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.

 跟踪断点调试发现Flex 源码chartBase 类中的

var chartBaseStyle:CSSStyleDeclaration = styleManager.getStyleDeclaration("mx.charts.chartClasses.ChartBase");

chartBaseStyle值为空。

在网上找到了两种方法都无法解决

第一种:在模块主程序(Module的那个mxml)中覆盖如下方法:

override public function get moduleFactory():IFlexModuleFactory {

     return FlexGlobals.topLevelApplication.moduleFactory;

}

第二种:在使用图表控件的模块中添加事件

xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:viewer="com.esri.viewer.*"
xmlns:components="com.esri.viewer.components.*"
xmlns:esri="http://www.esri.com/2008/ags"
preinitialize="basewidget_preinitializeHandler(event)"
响应事件的函数代码:
private function basewidget_preinitializeHandler(event:FlexEvent):void
{
// work-around for 4.6 regression
copyStyleFromParent("mx.charts.chartClasses.ChartBase");
copyStyleFromParent("mx.charts.chartClasses.CartesianChart");
copyStyleFromParent("mx.charts.chartClasses.PolarChart");
copyStyleFromParent("mx.charts.BarChart");
copyStyleFromParent("mx.charts.ColumnChart");
copyStyleFromParent("mx.charts.LineChart");
copyStyleFromParent("mx.charts.PieChart");
copyStyleFromParent("mx.charts.AxisRenderer");
copyStyleFromParent(".blockCategoryAxis");
copyStyleFromParent(".blockNumericAxis");
copyStyleFromParent(".linedNumericAxis");
copyStyleFromParent(".dashedNumericAxis");
copyStyleFromParent(".dashedCategoryAxis");
copyStyleFromParent(".hangingCategoryAxis");
copyStyleFromParent("mx.charts.GridLines");
copyStyleFromParent(".horizontalGridLines");
copyStyleFromParent("mx.charts.series.BarSeries");
copyStyleFromParent("mx.charts.series.ColumnSeries");
copyStyleFromParent("mx.charts.series.LineSeries");
copyStyleFromParent("mx.charts.series.PieSeries");
}

private function copyStyleFromParent(selector:String):void
{
var chartBaseStyle:CSSStyleDeclaration = styleManager.getStyleDeclaration(selector);
if (!chartBaseStyle && styleManager.parent)
{
var parentStyle:CSSStyleDeclaration = styleManager.parent.getStyleDeclaration(selector);
if (parentStyle)
{
styleManager.setStyleDeclaration(selector, parentStyle, false);
}
}

}

因为图形控件与装载图形控件的容器(我用的是TabNavigator)都是用AS写的,然后我就试着用MXML写了一遍,然后运行后一切正常。最后发现只要装载图形控件的容器(TabNavigator) 不用AS写就没问题

0 0
原创粉丝点击