从 AS3/OpenLaszlo 中实例化 Flex 应用程序
Posted
技术标签:
【中文标题】从 AS3/OpenLaszlo 中实例化 Flex 应用程序【英文标题】:instantiating a Flex app from within AS3/OpenLaszlo 【发布时间】:2012-05-04 04:03:04 【问题描述】:我有一个 OpenLaszlo/AS3 应用程序 (olapp.lzx) 和一个 Flex 应用程序 (flexapp.swc)。 我想在 olapp.lzx 中包含 flexapp.swc,如下所示:
olapp.lzx (AS3):
===============
...
var flexapp:Sprite = new FlexApp();
flexapp.doSomething();
...
flexapp.swc 就是从这个 mxml 编译而来的:
flexapp.mxml:
============
<?xml version="1.0"?>
<!-- intro/FlexApp.mxml -->
<mx:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<mx:ComboBox>
<mx:dataProvider>
<s:ArrayList>
<fx:String>AK</fx:String>
<fx:String>AL</fx:String>
<!-- Add all other states. -->
</s:ArrayList>
</mx:dataProvider>
</mx:ComboBox>
</mx:Application>
当我将 flexapp.mxml 编译为 swf 时,它运行良好,但从 AS3 实例化 失败(类型错误:错误 #2007)。我研究了 mxml->as3 集成不是通常的方法,但对于这种特殊情况,我需要这样做。我不得不承认我对 Flex 还不是很熟悉,只有 OpenLaszlo。 flexapp.mxml 中应该改变什么?谢谢!
【问题讨论】:
SWC 是一个 ActionScript 库;不是一个可运行的应用程序......我从未听说过有人试图将应用程序标签添加到 SWC 中;但我想这在技术上应该是可能的。我怀疑——但我不确定——MXMLC 编译器在创建基于允许应用程序实际运行的应用程序标记的 SWF 时会发挥一些作用。创建 SWC 时可能不存在此类步骤。如果我是你,我会考虑从你的 Flex 代码创建一个 SWF,然后在运行时从你的 OpenLaszlo 应用程序加载它。 由于某种原因,我无法在 OpenLaszlo 中包含 swf 文件,但会在其他场合尝试。但是我能够包含一个从纯 .as 代码创建的 swc,它除了扩展 Sprite 并在其中绘制一些圆圈之外什么都不做。当我从 UIComponent 而不是 Sprite 继承时,它不再显示任何图形,尽管也不再有错误消息。会不会是 Flex 组件在没有 mxml 的情况下一般无法最终确定,因此没有包含在 OpenLaszlo 中? OpenLaszlo 部署到许多平台,Flash Player 只是其中之一,对吗?您应该能够在运行时使用加载器对象 livedocs.adobe.com/flex/3/html/… 在 Flash Player 中加载 SWF。不过,我不知道它如何适合 OpenLaszlo。您的 Flex SWC 不工作的原因很可能是因为 Flex 框架没有被初始化 [我相信我在最初的评论中已经解决了这个问题] 好的,我通过加载可运行的 .swf 尝试了您建议的方式。我使用了文档link 中的示例,效果很好。但不适用于我用 mxml 编译的那些 .swf 文件。也许我编译错了,因为我没有 IDE。我会检查的。 我现在可以使用内部最新的 Flex 改进的 OpenLaszlo 安装。使用它,我能够将大型 SWF MXML/Flex 应用程序加载到 OL 窗口中。这甚至适用于 Flash 10 和 11。我不知道为什么它不适用于 4.9.0。不幸的是,OL 窗口似乎阻止了应用程序中的某些鼠标拖动事件,尽管 90% 的所有其他鼠标操作都有效。当我使用简单视图而不是窗口时,所有鼠标操作都被停用。但接下来我会调查这个问题。毕竟,您对 Loader 和 SWF 的提示帮助了我。谢谢! 【参考方案1】:OpenLaszlo 不正式支持将 Flash SWF 应用程序导入其中。唯一的例外是编码为 SWF 格式的电影。
(如果您的应用程序使用 Flash 9 (SWF9) 或更高版本,则 SWF 影片需要以 AVM2 格式编码,对于 Flash 8 或更低版本,需要 AVM1 编解码器)。
如果您尝试将不是简单 SWF 影片的 SWF 加载到 OpenLaszlo
【讨论】:
以上是关于从 AS3/OpenLaszlo 中实例化 Flex 应用程序的主要内容,如果未能解决你的问题,请参考以下文章