在 Flex 中投射到接口时出现问题

发布于 2024-12-06 00:32:59 字数 1313 浏览 1 评论 0原文

我正在使用模块通信接口,如 adobe flex 文档。当我在 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不为null,但是当转换为ISomeModule,它变为空。 有谁知道如何解决这个问题? 谢谢

I am using interfaces for module communication like in adobe flex documentation. When I have a ModuleLoader in mxml, everything works great.

<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>

and i have this code

var someChild:* = firstTab.child as ISomeModule;

ISomeModule is the interface.
But when I have a ModuleLoader in actionscript in another file, when I do the same thing, someChild becomes null when cast to ISomeModule

var myLoader:ModuleLoader=new ModuleLoader();
myLoader.percentHeight=50;
myLoader.percentWidth=50;
myLoader.loadModule(moduleURL + "?attr=value&attr2=" + parentDocument.attr2);

and in another function, I have

var childMod:* = myLoader.child as ISomeModule;

myLoader.child is not null but when cast to ISomeModule, it becomes null.
Does anyone have an idea about how to solve this?
thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

可遇━不可求 2024-12-13 00:33:00

两件事:

  • 您需要相同的 ApplicationDomain 来进行跨模块类共享(您还应该在模块编译中启用优化): ;
  • 如果我没记错的话,实际模块本身应该是 firstChild.content 而不是 firstChild.child

2 things:

  • You need the same ApplicationDomain for cross-module class sharing (you should also enable optimizing in your Module compilation): <s:ModuleLoader url="someURL" applicationDomain="{ApplicationDomain.currentDomain}" />
  • If I remember correctly, it should be firstChild.content and not firstChild.child for the actual module itself.
Smile简单爱 2024-12-13 00:33:00

这篇文章已经有很多年了,但目前我通过使用 AS3 动态创建 ModuleLoader 遇到了类似的问题。
上面设置 ApplicationDomain 的提示救了我的命...谢谢!

private function createModule():void {
    _moduleLoader = new ModuleLoader;
    _moduleLoader.applicationDomain = ApplicationDomain.currentDomain;
    _moduleLoader.addEventListener(ModuleEvent.READY, onModuleReady);
    _moduleLoader.url = "path/to/your/module/MyModule.swf";
    _moduleLoader.loadModule();
}

private function onModuleReady(event:ModuleEvent):void {
    // iMyModule is null if ApplicationDomain is not set
    var iMyModule:* = event.currentTarget.child as IMyModule;
}

谢谢,
奥拉夫

This post is quite some years old but currently I ran into a similar issue by creating ModuleLoader dynamically with AS3.
The above hint to set the ApplicationDomain saved my day... thanks!

private function createModule():void {
    _moduleLoader = new ModuleLoader;
    _moduleLoader.applicationDomain = ApplicationDomain.currentDomain;
    _moduleLoader.addEventListener(ModuleEvent.READY, onModuleReady);
    _moduleLoader.url = "path/to/your/module/MyModule.swf";
    _moduleLoader.loadModule();
}

private function onModuleReady(event:ModuleEvent):void {
    // iMyModule is null if ApplicationDomain is not set
    var iMyModule:* = event.currentTarget.child as IMyModule;
}

Thanks,
Olaf

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文