【问题标题】:Whats best practice for including external actionscript files in flex application在 flex 应用程序中包含外部 actionscript 文件的最佳实践是什么
【发布时间】:2009-02-21 16:19:24
【问题描述】:

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

错误:包不能嵌套。

如果使用导入,这些错误就会消失并且文件可以编译,但是在尝试实例化类时会遇到问题。

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

给出:

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

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

谢谢,

【问题讨论】:

    标签: apache-flex class actionscript include


    【解决方案1】:

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

    然后对于您似乎遇到的更具体的问题:您可能正在尝试执行 testing.init(); 就在<script> 块中——试着把它放在一个方法中。您应该只在脚本块中直接包含 import 语句和成员声明(变量、函数)之类的内容,以及函数中的此类语句。

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

    试试这样的:

    <?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>
    

    【讨论】:

    • 谢谢。这更有意义。但是,我现在收到错误:通过使用静态类型日志的引用调用可能未定义的方法 init。
    • 确保您的 Journal 类有一个具有该名称的公共函数,并且它保存在名为 Journal.as 的文件中,位于 project-root/lib/ 路径中(其中 project-root 是项目目录结构的根目录)
    • 另外,如果 init() 总是需要在使用前被调用,你可以在 Journal 类的构造函数中做 init 的东西。
    【解决方案2】:

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

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

    参见“Comparing, including, and importing ActionScript code”手册。

    【讨论】:

    • 感谢您的回复,但这并不能回答我的问题。我已经多次查看您发布的链接。上面的代码有什么问题吗?为什么会出现这些错误?
    【解决方案3】:

    试试这个:

    <mx:Script>
        <![CDATA[
    
        import lib.Journal;
    
        public var testing:Journal;
    
        private function creationCompleteHandler():void
        {
            testing = new Journal();
        }
    
        ]]>
    </mx:Script>
    

    干杯, 德克

    【讨论】:

      猜你喜欢
      • 2012-08-22
      • 2011-01-27
      • 2010-11-10
      • 1970-01-01
      • 1970-01-01
      • 2015-08-03
      • 2011-01-30
      • 1970-01-01
      • 2010-10-31
      相关资源
      最近更新 更多