1

如果我在 flex mxml 文件中包含一个外部动作脚本文件,我会在编译时根据使用的方法获得不同的行为。使用带有源属性或包含语句的 mx 脚本标记,然后编译文件会产生如下错误:

错误:包不能嵌套。

如果使用 import 这些错误消失并且文件编译但是在尝试实例化类时我遇到了问题。

    import lib.journal;
    public var testing:journal = new journal();
    testing.init();

这使:

错误:访问未定义的属性测试。

谁能解释这里发生了什么?包含文件而不是导入它对包和范围有什么影响?

谢谢,

4

3 回答 3

4

回答更一般的问题:导入是包含外部文件的首选方式。在我看来,该include语句应该只在没有其他方法的情况下使用,因为如果出现问题,它会使调试变得更加困难,并且通常会使代码更难阅读和理解。阿萨夫对做什么importinclude做什么的描述是正确的。

然后对于您似乎遇到的更具体的问题:您可能正在尝试 testing.init();在块中做正确的事情<script>-尝试将其放入方法中。您应该只import在脚本块中直接包含语句和成员声明(变量、函数)之类的内容,以及在函数中包含这样的语句。

您会看到该错误消息,因为当您调用init()此对象的方法时,它尚未创建——当您的 MXML 文件所代表的类的定义被加载时,该语句将被执行;您想要的是在创建此类的特定实例时执行它,并且您可以通过在类的构造函数中调用它来执行此操作(据我所知,这在您编写时是不可能的使用 MXML 的类,请继续阅读:)或例如在FlexEvent.CREATION_COMPLETE(或creationComplete根据 MXML 标记属性)事件的处理函数中(参见下面的示例。)

尝试这样的事情:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml"
    width="800" height="600"
    creationComplete="creationCompleteHandler();"
>
    <mx:Script>
        <![CDATA[

        import lib.Journal;

        public var testing:Journal = new Journal();

        private function creationCompleteHandler():void
        {
            testing.init();
        }

        ]]>
    </mx:Script>

</mx:Application>
于 2009-02-21T17:16:16.093 回答
2

Import 允许您访问导入文件的公共声明。

包含将 as3 文件的内容植入到包含位置,就像您在那里键入它一样

请参阅“比较、包含和导入 ActionScript 代码”手册。

于 2009-02-21T16:44:14.503 回答
0

试试这个:

<mx:Script>
    <![CDATA[

    import lib.Journal;

    public var testing:Journal;

    private function creationCompleteHandler():void
    {
        testing = new Journal();
    }

    ]]>
</mx:Script>

干杯,德克

于 2009-07-22T19:44:44.530 回答