Flex AIR应用程序中的Actionscript基类

时间:2010-03-30 03:54:18

标签: flex actionscript-3 actionscript adobe air

我正在尝试使用Flex Builder 3构建Flex AIR应用程序,我刚刚开始使用它。

在Flash CS4中,创作环境中有一个文本字段,您可以在其中指定将成为“基础”类的类 - 您的类继承自Sprite,然后在运行时“成为”舞台。有没有办法用Flex / AIR做同样的事情?如果不这样,任何人都可以解释如何创建和使用外部类吗?

最初我在TestApp.mxml中有这个:

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:Script source="TestApp.as"/>
</mx:WindowedApplication>

这在TestApp.as中:

package {
    public class TestApp {
        public function TestApp() {
            trace('Hello World');
        }
    }
}

这给出了错误“包不能嵌套”,所以我尝试取出包语句:

public class TestApp {
    public function TestApp() {
        trace('Hello World');
    }
}

这给出了一个错误“类不能嵌套”,所以我终于放弃了并试图完全取出这个类,我想尝试从一堆函数开始:

function init() {
    trace('Hello World');
}

但是这会产生错误“在源路径中找到的文件必须具有外部可见的定义。如果文件中的定义是外部可见的,请将定义放在包中”。

我无法获胜!当我把我的课程放在一个包中时,它说我不能这样做,因为它会被嵌套。当我不这样做时,它说它需要在一个包中,以便可以看到它。

有谁知道如何解决这个问题?如果我不能做自定义类作为基类的东西,有没有办法可以让它像:

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:Script source="TestApp.as"/>
    <mx:Script>
        var app = new TestApp();
    </mx:Script>
</mx:WindowedApplication>

目前我根本无法导入类定义,所以即使这样也行不通。

提前致谢!

2 个答案:

答案 0 :(得分:0)

MXML文档实际上已转换为actionscript类。 filename表示类名,root标签表示基类。所以TestApp.mxml代表“基础”类,最常被称为文档类

现在,如果要在MXML中使用自己的类/ mxml组件,则需要使用xmlns:mx="http://www.adobe.com/2006/mxml"导入它们所在的命名空间(很像xmlns:c="mycomponents.*"导入flex组件)。因此,如果您有自定义类mycomponenty.Foo,则可以按如下方式使用它:

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:c="mycomponents.*" >
    <c:Foo />
</mx:WindowedApplication>

我还建议你养成将内联脚本作为cdata嵌入的习惯。

答案 1 :(得分:0)

类路径根目录中名为TestApp.mxml的mxml文件在默认包中创建TestApp类。

当您使用<mx:Script source="TestApp.as"/>包含脚本时,编译器只是将TestApp.as文件的内容作为CDATA块复制到mxml文件中。因此,包/类不能嵌套错误。第三个错误是因为脚本文件与类名保持相同的名称(编译器知道那里有一个TestApp类 - 但文件TestApp.as中没有类声明) 。如果您将TestApp.as重命名为TestApp_script.as之类的其他内容并更改<mx:Script/>标记中的文件路径,那么您就可以了。

正如已经建议的那样,总是在内联CDATA块中编写ActionScript而不是外部脚本文件 - 这样更易于维护。毕竟它们(mxml和脚本)都是同一个类的一部分,它们属于同一个文件。