flex 调用 模块 方法
场景:
Flex4 主程序调用模块方法报TypeError: Error #1009:无法访问空对象引用的属性或方法
当在这个模块下没有组件的时候,没问题,可以调用成功,并且加这个flex3的 <mx:videoDisplay/>这个组件也没问题
终于调用成功了!
Flex4 主程序调用模块方法报TypeError: Error #1009:无法访问空对象引用的属性或方法
flex做导航菜单,页面用模块,由于在主应用需要调用某个模块下的方法:
(moduleLoader.child as 模块名).方法();
当在这个模块下没有组件的时候,没问题,可以调用成功,并且加这个flex3的 <mx:videoDisplay/>这个组件也没问题
但是试了下随便加几个别的组件就报错:
TypeError: Error #1009: 无法访问空对象引用的属性或方法。 at mx.core::UIComponent/getStyle()[E:\dev\4.y\frameworks\projects\framework\src\mx\core\UIComponent.as:11127] at mx.core::UIComponent/getConstraintValue()[E:\dev\4.y\frameworks\projects\framework\src\mx\core\UIComponent.as:9083] at mx.core::UIComponent/get horizontalCenter()[E:\dev\4.y\frameworks\projects\framework\src\mx\core\UIComponent.as:9252] at spark.layouts::BasicLayout/measure()[E:\dev\4.y\frameworks\projects\spark\src\spark\layouts\BasicLayout.as:253] at spark.components.supportClasses::GroupBase/measure()[E:\dev\4.y\frameworks\projects\spark\src\spark\components\supportClasses\GroupBase.as:1148] at mx.core::UIComponent/http://www.adobe.com/2006/flex/mx/internal::measureSizes()[E:\dev\4.y\frameworks\projects\framework\src\mx\core\UIComponent.as:8506] at mx.core::UIComponent/validateSize()[E:\dev\4.y\frameworks\projects\framework\src\mx\core\UIComponent.as:8430] at spark.components::Group/validateSize()[E:\dev\4.y\frameworks\projects\spark\src\spark\components\Group.as:1012] at mx.managers::LayoutManager/validateSize()[E:\dev\4.y\frameworks\projects\framework\src\mx\managers\LayoutManager.as:665] at mx.managers::LayoutManager/doPhasedInstantiation()[E:\dev\4.y\frameworks\projects\framework\src\mx\managers\LayoutManager.as:792] at mx.managers::LayoutManager/doPhasedInstantiationCallback()[E:\dev\4.y\frameworks\projects\framework\src\mx\managers\LayoutManager.as:1180]后来就不去调用这个方法是可以,但是我在主程序中随便写的一个方法
private function test():void{ (moduleLoader.child as 模块名).方法(); }
这个方法根本就没调用,也报同样的错,后来在谷歌上一直翻一直翻,翻到点信息
就是说在module编译的时候,会自己初始化一些额外的内容,如皮肤,布局等,但是在主程序中引用这个module的时候,并没有去初始化这些额外的内容
所以就会报错
解决办法就是自己动手初始化一下就好了,在ModuleLoader控件的ready事件中加上:
protected function mainML_readyHandler(event:ModuleEvent):void { event.target.child.styleManager.initProtoChainRoots(); }
终于调用成功了!