我是Flex的全新手,所以为我的愚蠢道歉。我已经找到了答案,但没有找到任何似乎正在做的事情。
我正在尝试做什么:移植此示例http://www.adobe.com/devnet/air/flex/articles/flex_air_codebase_print.html 到Flash Builder 4。
一切似乎都很好,但有一件事。当我使用Air应用程序的原始代码时
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
creationComplete="onApplicationComplete()">
<fx:Script>
<![CDATA[
private static const neededForCompilation:AirGeneralImplementation = null;
private function onApplicationComplete():void
{
var can:MainCanvas = new MainCanvas();
this.addChild(can);
can.labelMessage = "Loaded in an AIR Application ";
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
</s:WindowedApplication>
我收到此运行时错误
错误:addChild()不可用 这个班。相反,使用addElement() 或修改皮肤,如果有的话。 在 spark.components.supportClasses :: SkinnableComponent /的addChild()[E:\ dev的\ 4.0.0 \框架\项目\火花\ SRC \火花\部件\ supportClasses \ SkinnableComponent.as:1038]
如果我用
代替代码 this.addElement(can)
;
一切都很好,但是当我第一次尝试按下主画布上的任何按钮时,我得到以下运行时错误
ArgumentError:错误#2025:提供的DisplayObject必须是调用者的子级。 在flash.display :: DisplayObjectContainer / getChildIndex() 在mx.managers :: SystemManager / getChildIndex()[E:\ dev \ 4.0.0 \ frameworks \ projects \ framework \ src \ mx \ managers \ SystemManager.as:1665] at mx.managers.systemClasses :: ActiveWindowManager / mouseDownHandler()[E:\ dev \ 4.0.0 \ frameworks \ projects \ framework \ src \ mx \ managers \ systemClasses \ ActiveWindowManager.as:437]
这是主画布的超级简单代码
<?xml version="1.0" encoding="utf-8"?>
<s: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" minWidth="955" minHeight="600"
creationComplete="init();">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script source="main.as" />
<mx:Label id="lblMessage" text="The UI from the shared Flex app BothCode" x="433" y="112"/>
<s:Button x="433" y="141" click="saveFile();" label="Save File"/>
<s:Button x="601" y="141" click="GeneralFactory.getGeneralInstance().airOnlyFunctionality();" label="Air Only"/>
</s:Application>
任何帮助都会非常感激。任何指向如何设置可以在Air和Flash中编译同时共享相同代码的项目的指针,对Flex 4来说都是非常值得赞赏的。
谢谢你!答案 0 :(得分:2)
我使用Flex 4的教程遇到了同样的问题。我做了同样的事情并使用了&lt; s:Application&gt;主画布的组件。然而,本教程使用&lt; mx:VBox&gt;,我发现的解决方案是从&lt; s:Application&gt;更改主画布。到&lt; s:Group&gt;。问题似乎是在应用程序中嵌入应用程序。
答案 1 :(得分:0)
该链接上的代码是使用flex 3.5 sdk或更低版本编写的。您正在使用新的flex 4 sdk(这是Flash Builder的默认设置)。
您可以执行以下操作:
1.进入代码做任何必要的更改,使其适用于flex 4 sdk。
2.使用flex 3 sdk设置新项目(选择“使用特定SDK”,然后从“新建项目”窗口的下拉框中选择Flex 3)
我建议选择第二个选项,让它工作,一旦你进入flex 4,你可以做第一个选项。
干杯。