【问题标题】:Actionscript base class in Flex AIR appFlex AIR 应用程序中的 Actionscript 基类
【发布时间】:2010-03-30 03:54:17
【问题描述】:

我正在尝试使用刚刚开始使用的 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>

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

提前致谢!

【问题讨论】:

    标签: apache-flex actionscript-3 actionscript adobe air


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      一个 MXML 文档实际上被翻译成一个 actionscript 类。文件名表示类名,根标签表示基类。所以TestApp.mxml代表“基”类,最常被称为文档类

      现在,如果您想在 MXML 中使用自己的类/mxml 组件,则需要使用 xmlns:c="mycomponents.*" 导入它们所在的命名空间(很像 xmlns:mx="http://www.adobe.com/2006/mxml" 导入 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 的习惯。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-29
        • 1970-01-01
        • 2011-07-23
        • 2011-06-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多