Flex include和import ActionScript代碼
更新時(shí)間:2009年08月05日 21:54:54 作者:
為了讓你的MXML代碼可讀性增強(qiáng),你可以在<mx:Script>標(biāo)簽內(nèi)引用ActionScript代碼文件,而不是把大塊的代碼都插入到<mx:Script>里。引用ActionScript有include和import兩種方式。
在ActionScript中include和import有著截然不同的區(qū)別。Include是將一個(gè)文件中的代碼拷貝到另一個(gè)文件中去,也就是將代碼拷貝到include語(yǔ)句所在的位置上。Import是添加了對(duì)類(lèi)或包的引用,這樣你就可以訪(fǎng)問(wèn)其他的類(lèi)中定義的對(duì)象和屬性。通過(guò)import導(dǎo)入的代碼文件必須存在于你導(dǎo)入的路徑上。通過(guò)include導(dǎo)入代碼文件,輸入的文件地址必須與主文件要能在相對(duì)路徑上尋找到,或者通過(guò)絕對(duì)路徑也可以。
你可以在你的Flex應(yīng)用程序中使用include語(yǔ)句和< mx:Script source="filename">標(biāo)簽來(lái)添加ActionScript代碼。
你可以在<mx:Script>內(nèi)使用import語(yǔ)句來(lái)引用你的Flex應(yīng)用程序中可能需要的類(lèi)和包。
你可以在<mx:Script>標(biāo)簽內(nèi)通過(guò)引用外部的ActionScrit文件來(lái)引入ActionScript代碼。在編譯的時(shí)候,編譯器會(huì)將整個(gè)代碼文件中的內(nèi)容拷貝到你的MXML程序中,就像你真的在標(biāo)簽內(nèi)寫(xiě)了代碼一樣。在<mx:Script>代碼塊中,ActionScript語(yǔ)句只能在函數(shù)內(nèi)部。引入的代碼文件也可以定義靜態(tài)變量和命名空間,引入其他的ActionScript文件,導(dǎo)入聲明定義,和使用命名空間。但你不能將要導(dǎo)入的文件定義為類(lèi)。
引入的ActionScript文件中定義的變量和函數(shù)可以允許給MXML文件中的任何組件使用。引入的ActionScript文件的名字不能與導(dǎo)入的ActionScript類(lèi)的名字一樣。Flex可以訪(fǎng)問(wèn)導(dǎo)入的文件中的變量和函數(shù),但不能添加新的類(lèi)(本人理解為被導(dǎo)入的文件不能是個(gè)類(lèi)),因?yàn)镸XML文件本身就是一個(gè)類(lèi)。
導(dǎo)入的AS文件不一定非要和MXML文件在同一個(gè)目錄下。然而,你必須讓你的程序能夠在目錄結(jié)構(gòu)上正確識(shí)別到你的ActionScript代碼文件。
下面有兩種方法能在Flex應(yīng)用程序中引入外部的ActionScript文件:
§ 使用<mx:Script>標(biāo)簽的source屬性。這是引入外部ActionScript代碼文件的首選方法。
§ 在<mx:Script>代碼塊中使用include語(yǔ)句。
使用source屬性來(lái)引入ActionScript文件
你可以在Flex應(yīng)用程序中使用<mx:Script>標(biāo)簽的source屬性來(lái)引入外部的ActionScript文件。這種方式可以讓你的MXML文件中的代碼不那么零亂而且還可以提高代碼的可重用性。
不要讓代碼文件與程序文件的名字一樣。這樣會(huì)讓編譯器報(bào)錯(cuò)。
下面的是IncludedFile.as文件的內(nèi)容:
// usingas/includes/IncludedFile.as
public function computeSum(a:Number, b:Number):Number {
return a + b;
}
下面例子中引入了IncludedFile.as文件中的內(nèi)容。該文件是在引入它的文件的子目錄下。
<?xml version="1.0"?>
<!-- usingas/SourceInclude.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script source="includes/IncludedFile.as"/>
<mx:TextInput id="ta1st" text="3" width="40" x="170" y="24" textAlign="right"/>
<mx:TextInput id="ta2nd" text="3" width="40" x="170" y="52" textAlign="right"/>
<mx:TextArea id="taMain" height="25" width="78" x="132" y="82" textAlign="right"/>
<mx:Button id="b1" label="Compute Sum"
click="taMain.text=String(computeSum(Number(ta1st.text), Number(ta2nd.text)));"
x="105"
y="115"
/>
<mx:Label x="148" y="52" text="+" fontWeight="bold" fontSize="17" width="23"/>
</mx:Application>
<mx:Script>標(biāo)簽的source屬性支持相對(duì)路徑和絕對(duì)路徑兩種方式。
你不能在同一個(gè)<mx:Script>標(biāo)簽內(nèi)既使用source屬性又寫(xiě)ActionScript代碼。如果需要這么做的話(huà),需要使用兩個(gè)<mx:Script>標(biāo)簽。
Include指令一個(gè)ActionScript語(yǔ)句,可以把指定的文件中的內(nèi)容拷貝到MXML文件中去。Include指令的語(yǔ)法如下所示:
include "file_name";
下面的例子中引入了myfuncitons.as文件:
<?xml version="1.0"?>
<!-- usingas/IncludeASFile.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script><![CDATA[
/* myfunctions.as文件定義了兩個(gè)返回字符串的函數(shù) */
include "includes/myfunctions.as";
]]></mx:Script>
<mx:Button id="myButton"
label="Call Methods in Included File"
click="ta1.text=doSomething();ta1.text+=doSomethingElse()"
/>
<mx:TextArea width="268" id="ta1"/>
<mx:Button label="Clear" click="ta1.text=''"/>
</mx:Application>
你可以讓每個(gè)include指令都指向單一個(gè)文件,也可以使用任意多的include指令語(yǔ)句。Include指令可以嵌套使用。通過(guò)include指令引入的文件中也可以通過(guò)使用include指令引入其他的文件。
Include指令僅僅支持相對(duì)路徑。
Include指令只能在允許多條語(yǔ)句執(zhí)行的地方使用。例如,下面的例子就是錯(cuò)誤的:
if (expr)
include "foo.as"; //IF語(yǔ)句的后面的第一條語(yǔ)句可以執(zhí)行,剩下的語(yǔ)句都不行
...
下面的例子是正確的:
if (expr) {
include "foo.as"; // IF后的{}內(nèi)的所有語(yǔ)句都可以執(zhí)行
}
花括號(hào)中允許使用多條語(yǔ)句所以你可以在花括號(hào)中添加多條語(yǔ)句。
Adobe建議:盡量不要使用include指令來(lái)引用大量的ActionScript文件。你應(yīng)該將代碼分成不同類(lèi)文件中,然后將這些類(lèi)文件存放在合適的邏輯包結(jié)構(gòu)中。
<mx:Script>標(biāo)簽的source屬性與include指令引用文件的方式各有不同。
下面闡述的就是<mx:Script>標(biāo)簽的source屬性引用外部文件時(shí)的有效的路徑:
§ 相對(duì)URL,例如../myscript.as。沒(méi)有以斜線(xiàn)開(kāi)頭URl決定了文件的相對(duì)路徑。如果<mx:Script source="../IncludedFile.as">包含在"mysite/myfiles/myapp.mxml,"里,系統(tǒng)會(huì)尋找"mysite/IncludedFile.as"。
ActionScript中的include指令只能引用相對(duì)的URL。Flex會(huì)從源代碼路徑中尋找導(dǎo)入的類(lèi)和包。Flex不會(huì)從源代碼路徑中尋找那些包含了include指令的文件或<mx:Script>標(biāo)簽的source屬性引用的文件。
導(dǎo)入類(lèi)和包
如果你創(chuàng)建了多個(gè)公用類(lèi)或者存放了常用函數(shù)的ActionScript文件,你可能希望將它們存儲(chǔ)在包內(nèi)的一組類(lèi)中。你可以使用import語(yǔ)句來(lái)導(dǎo)入AcionScript類(lèi)和包。導(dǎo)入之后,當(dāng)你使用ActionScript來(lái)訪(fǎng)問(wèn)類(lèi)的時(shí)候你不用輸入完整的類(lèi)名。
下面的例子中導(dǎo)入了MyPackage.Util包內(nèi)的MyClass類(lèi):
<?xml version="1.0"?>
<!-- usingas/AccessingPackagedClasses.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script><![CDATA[
import MyPackage.Util.MyClass;
private var mc:MyClass = new MyClass;
]]></mx:Script>
<mx:Button id="myButton" label="Click Me" click="myButton.label=mc.returnAString()"/>
</mx:Application>
在這段代碼中,取代使用完整類(lèi)名(MyPackage.Util.MyClass)來(lái)引用類(lèi)的是你可以使用MyClass來(lái)引用類(lèi)。
你也可以使用通配符(*)來(lái)導(dǎo)入整個(gè)包。例如,下面的語(yǔ)句就是導(dǎo)入了整個(gè)MyPackage.Util包:
import MyPackage.Util.*;
Flex會(huì)搜尋導(dǎo)入的文件和包,并且只導(dǎo)入那些被最終生成的SWF文件用到的類(lèi)和包。
簡(jiǎn)單的定義完整的類(lèi)名是不夠的。你應(yīng)該在僅僅當(dāng)需要區(qū)別兩個(gè)在不同的包內(nèi)的但有同樣名字的類(lèi)的時(shí)候使用完整的類(lèi)名。
如果你在程序中導(dǎo)入了類(lèi)但并沒(méi)有使用它,那么這個(gè)類(lèi)就不會(huì)編譯到最終生成的SWF文件的字節(jié)代碼中去。因此,使用通配符(*)導(dǎo)入整個(gè)包并不能增加SWF文件的大小。
你可以在你的Flex應(yīng)用程序中使用include語(yǔ)句和< mx:Script source="filename">標(biāo)簽來(lái)添加ActionScript代碼。
你可以在<mx:Script>內(nèi)使用import語(yǔ)句來(lái)引用你的Flex應(yīng)用程序中可能需要的類(lèi)和包。
你可以在<mx:Script>標(biāo)簽內(nèi)通過(guò)引用外部的ActionScrit文件來(lái)引入ActionScript代碼。在編譯的時(shí)候,編譯器會(huì)將整個(gè)代碼文件中的內(nèi)容拷貝到你的MXML程序中,就像你真的在標(biāo)簽內(nèi)寫(xiě)了代碼一樣。在<mx:Script>代碼塊中,ActionScript語(yǔ)句只能在函數(shù)內(nèi)部。引入的代碼文件也可以定義靜態(tài)變量和命名空間,引入其他的ActionScript文件,導(dǎo)入聲明定義,和使用命名空間。但你不能將要導(dǎo)入的文件定義為類(lèi)。
引入的ActionScript文件中定義的變量和函數(shù)可以允許給MXML文件中的任何組件使用。引入的ActionScript文件的名字不能與導(dǎo)入的ActionScript類(lèi)的名字一樣。Flex可以訪(fǎng)問(wèn)導(dǎo)入的文件中的變量和函數(shù),但不能添加新的類(lèi)(本人理解為被導(dǎo)入的文件不能是個(gè)類(lèi)),因?yàn)镸XML文件本身就是一個(gè)類(lèi)。
導(dǎo)入的AS文件不一定非要和MXML文件在同一個(gè)目錄下。然而,你必須讓你的程序能夠在目錄結(jié)構(gòu)上正確識(shí)別到你的ActionScript代碼文件。
下面有兩種方法能在Flex應(yīng)用程序中引入外部的ActionScript文件:
§ 使用<mx:Script>標(biāo)簽的source屬性。這是引入外部ActionScript代碼文件的首選方法。
§ 在<mx:Script>代碼塊中使用include語(yǔ)句。
使用source屬性來(lái)引入ActionScript文件
你可以在Flex應(yīng)用程序中使用<mx:Script>標(biāo)簽的source屬性來(lái)引入外部的ActionScript文件。這種方式可以讓你的MXML文件中的代碼不那么零亂而且還可以提高代碼的可重用性。
不要讓代碼文件與程序文件的名字一樣。這樣會(huì)讓編譯器報(bào)錯(cuò)。
下面的是IncludedFile.as文件的內(nèi)容:
復(fù)制代碼 代碼如下:
// usingas/includes/IncludedFile.as
public function computeSum(a:Number, b:Number):Number {
return a + b;
}
下面例子中引入了IncludedFile.as文件中的內(nèi)容。該文件是在引入它的文件的子目錄下。
復(fù)制代碼 代碼如下:
<?xml version="1.0"?>
<!-- usingas/SourceInclude.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script source="includes/IncludedFile.as"/>
<mx:TextInput id="ta1st" text="3" width="40" x="170" y="24" textAlign="right"/>
<mx:TextInput id="ta2nd" text="3" width="40" x="170" y="52" textAlign="right"/>
<mx:TextArea id="taMain" height="25" width="78" x="132" y="82" textAlign="right"/>
<mx:Button id="b1" label="Compute Sum"
click="taMain.text=String(computeSum(Number(ta1st.text), Number(ta2nd.text)));"
x="105"
y="115"
/>
<mx:Label x="148" y="52" text="+" fontWeight="bold" fontSize="17" width="23"/>
</mx:Application>
<mx:Script>標(biāo)簽的source屬性支持相對(duì)路徑和絕對(duì)路徑兩種方式。
你不能在同一個(gè)<mx:Script>標(biāo)簽內(nèi)既使用source屬性又寫(xiě)ActionScript代碼。如果需要這么做的話(huà),需要使用兩個(gè)<mx:Script>標(biāo)簽。
Include指令一個(gè)ActionScript語(yǔ)句,可以把指定的文件中的內(nèi)容拷貝到MXML文件中去。Include指令的語(yǔ)法如下所示:
include "file_name";
下面的例子中引入了myfuncitons.as文件:
復(fù)制代碼 代碼如下:
<?xml version="1.0"?>
<!-- usingas/IncludeASFile.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script><![CDATA[
/* myfunctions.as文件定義了兩個(gè)返回字符串的函數(shù) */
include "includes/myfunctions.as";
]]></mx:Script>
<mx:Button id="myButton"
label="Call Methods in Included File"
click="ta1.text=doSomething();ta1.text+=doSomethingElse()"
/>
<mx:TextArea width="268" id="ta1"/>
<mx:Button label="Clear" click="ta1.text=''"/>
</mx:Application>
你可以讓每個(gè)include指令都指向單一個(gè)文件,也可以使用任意多的include指令語(yǔ)句。Include指令可以嵌套使用。通過(guò)include指令引入的文件中也可以通過(guò)使用include指令引入其他的文件。
Include指令僅僅支持相對(duì)路徑。
Include指令只能在允許多條語(yǔ)句執(zhí)行的地方使用。例如,下面的例子就是錯(cuò)誤的:
if (expr)
include "foo.as"; //IF語(yǔ)句的后面的第一條語(yǔ)句可以執(zhí)行,剩下的語(yǔ)句都不行
...
下面的例子是正確的:
if (expr) {
include "foo.as"; // IF后的{}內(nèi)的所有語(yǔ)句都可以執(zhí)行
}
花括號(hào)中允許使用多條語(yǔ)句所以你可以在花括號(hào)中添加多條語(yǔ)句。
Adobe建議:盡量不要使用include指令來(lái)引用大量的ActionScript文件。你應(yīng)該將代碼分成不同類(lèi)文件中,然后將這些類(lèi)文件存放在合適的邏輯包結(jié)構(gòu)中。
<mx:Script>標(biāo)簽的source屬性與include指令引用文件的方式各有不同。
下面闡述的就是<mx:Script>標(biāo)簽的source屬性引用外部文件時(shí)的有效的路徑:
§ 相對(duì)URL,例如../myscript.as。沒(méi)有以斜線(xiàn)開(kāi)頭URl決定了文件的相對(duì)路徑。如果<mx:Script source="../IncludedFile.as">包含在"mysite/myfiles/myapp.mxml,"里,系統(tǒng)會(huì)尋找"mysite/IncludedFile.as"。
ActionScript中的include指令只能引用相對(duì)的URL。Flex會(huì)從源代碼路徑中尋找導(dǎo)入的類(lèi)和包。Flex不會(huì)從源代碼路徑中尋找那些包含了include指令的文件或<mx:Script>標(biāo)簽的source屬性引用的文件。
導(dǎo)入類(lèi)和包
如果你創(chuàng)建了多個(gè)公用類(lèi)或者存放了常用函數(shù)的ActionScript文件,你可能希望將它們存儲(chǔ)在包內(nèi)的一組類(lèi)中。你可以使用import語(yǔ)句來(lái)導(dǎo)入AcionScript類(lèi)和包。導(dǎo)入之后,當(dāng)你使用ActionScript來(lái)訪(fǎng)問(wèn)類(lèi)的時(shí)候你不用輸入完整的類(lèi)名。
下面的例子中導(dǎo)入了MyPackage.Util包內(nèi)的MyClass類(lèi):
復(fù)制代碼 代碼如下:
<?xml version="1.0"?>
<!-- usingas/AccessingPackagedClasses.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script><![CDATA[
import MyPackage.Util.MyClass;
private var mc:MyClass = new MyClass;
]]></mx:Script>
<mx:Button id="myButton" label="Click Me" click="myButton.label=mc.returnAString()"/>
</mx:Application>
在這段代碼中,取代使用完整類(lèi)名(MyPackage.Util.MyClass)來(lái)引用類(lèi)的是你可以使用MyClass來(lái)引用類(lèi)。
你也可以使用通配符(*)來(lái)導(dǎo)入整個(gè)包。例如,下面的語(yǔ)句就是導(dǎo)入了整個(gè)MyPackage.Util包:
import MyPackage.Util.*;
Flex會(huì)搜尋導(dǎo)入的文件和包,并且只導(dǎo)入那些被最終生成的SWF文件用到的類(lèi)和包。
簡(jiǎn)單的定義完整的類(lèi)名是不夠的。你應(yīng)該在僅僅當(dāng)需要區(qū)別兩個(gè)在不同的包內(nèi)的但有同樣名字的類(lèi)的時(shí)候使用完整的類(lèi)名。
如果你在程序中導(dǎo)入了類(lèi)但并沒(méi)有使用它,那么這個(gè)類(lèi)就不會(huì)編譯到最終生成的SWF文件的字節(jié)代碼中去。因此,使用通配符(*)導(dǎo)入整個(gè)包并不能增加SWF文件的大小。
相關(guān)文章
Flex與.NET互操作(十二):FluorineFx.Net的及時(shí)通信應(yīng)用(Remote Shared Objects
遠(yuǎn)程共享對(duì)象(Remote Shared Objects) 可以用來(lái)跟蹤、存儲(chǔ)、共享以及做多客戶(hù)端的數(shù)據(jù)同步操作。只要共享對(duì)象上的數(shù)據(jù)發(fā)生了改變,將會(huì)把最新數(shù)據(jù)同步到所有連接到該共享對(duì)象的應(yīng)用程序客戶(hù)端。2009-06-06Flex與.NET互操作(八) 使用FluorineFx網(wǎng)關(guān)實(shí)現(xiàn)遠(yuǎn)程訪(fǎng)問(wèn)
關(guān)于遠(yuǎn)程訪(fǎng)問(wèn)在本系列文章中陸續(xù)的寫(xiě)了不少示例了,本文沒(méi)有準(zhǔn)備深入的去探討,為了鞏固FluorineFx網(wǎng)關(guān)的學(xué)習(xí)和使用。2009-06-06Flex 實(shí)現(xiàn)可以拖動(dòng)的毛玻璃效果
這是一個(gè)使用Flex實(shí)現(xiàn)的可拖動(dòng)的毛玻璃效果(效果在文章后面),具體我就不說(shuō)了,直接帖代碼。2009-11-11