【发布时间】:2011-09-22 14:42:51
【问题描述】:
我正在使用adobe flex documentation 中的接口进行模块通信。当我在 mxml 中有一个 ModuleLoader 时,一切正常。
<mx:TabNavigator id="testNav"
height="100%"
width="100%">
<s:ModuleLoader id="firstTab"
label="ONE"
width="100%"
url="path/to/module/Mod1.swf"/>
<s:ModuleLoader id="secondTab"
label="TWO"
width="100%"
url="path/to/module/Mod2.swf"/>
</mx:TabNavigator>
我有这个代码
var someChild:* = firstTab.child as ISomeModule;
ISomeModule 是接口。 但是当我在另一个文件中的 actionscript 中有一个 ModuleLoader 时,当我做同样的事情时, someChild 在转换为 ISomeModule 时变为 null
var myLoader:ModuleLoader=new ModuleLoader();
myLoader.percentHeight=50;
myLoader.percentWidth=50;
myLoader.loadModule(moduleURL + "?attr=value&attr2=" + parentDocument.attr2);
在另一个函数中,我有
var childMod:* = myLoader.child as ISomeModule;
myLoader.child 不为空,但当转换为 ISomeModule 时,它变为空。
有谁知道如何解决这个问题?
谢谢
【问题讨论】:
-
您确定可以转换为接口吗?您不必强制转换为对象吗?变量类型可以是接口;但是您必须使用在运行时实现该接口的对象。假设这是错误的。你试过这个: IssomeModule(firstTab.child) 吗?您确定 firstTab [和 child] 具有有效值吗?它们可以为空吗?
-
不,firstTab 和 child 没问题,我测试了它们并使用了我在 ISomeModule 中声明的函数,我只是在 official documentation 中做了类似的事情
-
您在进行演员阵容时是否在调试器中查看了
myLoader.child?调试器显示什么类型?它实现了你想要的接口吗? -
另外,当你说 ModuleLoader 是“在一个文件中”时,那个文件本身是一个模块吗?因为它有自己的域,所以它对您的接口的定义可能与您进行转换的定义不同。
-
@Gerhard 问题是由于很多原因我无法调试这个应用程序
标签: apache-flex actionscript-3 actionscript ria flex4.5