如果我在flex mxml文件中包含一个外部actionscript文件,我会在编译时获得不同的行为,具体取决于使用的方法。使用带有source属性或include语句的mx脚本标记,然后编译该文件会产生如下错误:
错误:无法嵌套包。
如果使用导入这些错误就会消失并且文件会编译但是在尝试实例化类时我会遇到问题。
import lib.journal;
public var testing:journal = new journal();
testing.init();
给出:
错误:访问未定义的属性测试。
任何人都可以解释这里发生了什么吗?包含文件而不是导入它对包和范围有什么影响?
感谢,
答案 0 :(得分:4)
回答更一般的问题:导入是包含外部文件的首选方式。在我看来,include
语句只应该在没有其他任何东西的情况下使用,因为如果出现问题会使调试变得更加困难并且使代码通常更难以阅读和理解。 Assaf对import
和include
所做的描述是正确的。
然后针对您似乎遇到的更具体的问题:您可能正在尝试这样做
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>
答案 1 :(得分:2)
导入允许您访问导入文件的公共声明。
将as3文件的内容包含在包含位置中,就像您在那里输入一样。
请参阅“Comparing, including, and importing ActionScript code”手册。
答案 2 :(得分:0)
试试这个:
<mx:Script>
<![CDATA[
import lib.Journal;
public var testing:Journal;
private function creationCompleteHandler():void
{
testing = new Journal();
}
]]>
</mx:Script>
干杯, 德克