TypeError: Error #1007: 尝试实例化的函数不是构造函数。

错误场景:本次错误场景在使用别人的Flex组件,迁移代码,复制功能至新项目中。编译都过了,没有报错误,运行时,点击相应功能出错,而且不能进入下一步,界面直接卡死。错误提示如下:

TypeError: Error #1007: 尝试实例化的函数不是构造函数。
	at mx.core::ClassFactory/newInstance()[E:\dev\4.y\frameworks\projects\framework\src\mx\core\ClassFactory.as:172]
	at mx.controls.dataGridClasses::DataGridColumn/http://www.adobe.com/2006/flex/mx/internal::getMeasuringRenderer()[E:\dev\4.y\frameworks\projects\mx\src\mx\controls\dataGridClasses\DataGridColumn.as:1906]
	at mx.controls::DataGrid/commitProperties()[E:\dev\4.y\frameworks\projects\mx\src\mx\controls\DataGrid.as:1935]
	at mx.core::UIComponent/validateProperties()[E:\dev\4.y\frameworks\projects\framework\src\mx\core\UIComponent.as:8219]
	at mx.managers::LayoutManager/validateProperties()[E:\dev\4.y\frameworks\projects\framework\src\mx\managers\LayoutManager.as:597]
	at mx.managers::LayoutManager/doPhasedInstantiation()[E:\dev\4.y\frameworks\projects\framework\src\mx\managers\LayoutManager.as:813]
	at mx.managers::LayoutManager/doPhasedInstantiationCallback()[E:\dev\4.y\frameworks\projects\framework\src\mx\managers\LayoutManager.as:1180]

其实错误提示说的很清楚:尝试实例化的函数不是构造函数,但是和传统的错误指向了某行代码又不一样,其实就是实例化某些对象时失败了。

代码确实不好查,我也是跟代码查了半天,后来才找到错误所在,错误提示告诉了我初始化mx.controls.dataGridClasses::DataGridColumn这些对象失败,然我此处代码如下:

			public function init_dataGrid(qx:FGridQxBean,grid:DataGrid):void{
				var columns:Array			=	new Array();
				if(qx.discList == null || qx.discList.length < 1){
					Alert.show("列属性为空!!");
				}
				for each(var colItem:GridDiscripBean in qx.discList){
					if(colItem.showGrid	== false){
						continue; 
					}
					var dataCol:DataGridColumn	=	init_dataGridColumn(colItem);
					columns.push(dataCol);
				}
				grid.columns	=	columns;
			}
			
			
			private function init_dataGridColumn(colItem:GridDiscripBean):DataGridColumn{
				var column:DataGridColumn	= 	new DataGridColumn();
				column.width				=	colItem.colWith;
				if(colItem.colName){
					column.dataField		=	colItem.colName;
				}
				column.headerText			=	colItem.discName;
				if(colItem.renderer){
					var renderer:Class 		= 	GlobalParameters.getClassDefinition(colItem.renderer);
					column.itemRenderer		=	new ClassFactory(renderer);
				}
//				column.setStyle("textAlign","center");
				return column;
			}

所有的 datagrid列和器渲染(即:itemRenderer)都是根据数据动态完成的,然后查数据,使用了DataGridItemLinksRendererDataGridItemLinkButRenderer这些自定义 Renderer,检查代码,都在,没有语法错误。知道再次Debuger,错误定格在此处,才有种豁然开朗的感觉:
在这里插入图片描述
Flex使用反射机制实例化对象之前,需要主程序中创建过,否则实例化时,会找不到资源。那错误也就不言而喻了。
在 Applications 中添加 new DataGridItemLinksRenderer();,new DataGridItemLinksRenderer() 语句即可。问题解决了 特此记录。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟●禅●酒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值