我正在尝试使用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>
目前我根本无法导入类定义,所以即使这样也行不通。
提前致谢!
答案 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和脚本)都是同一个类的一部分,它们属于同一个文件。