回答
我想你的問題是如何讓你的動作文件與包含你的設計的MXML文件分開。答案很簡單:
創建你的動作文件。僅在此文件中包含方法,並且不要將代碼包裝在package
或class
定義中。該文件應該如下所示:
import mx.controls.Alert;
// ActionScript file
/**
*
* Created By jviers
* Created on Apr 14, 2011
*
*
*/
public function hello():Alert{
Alert.show("Hello World!");
}
創建包含「Design」組件的MXML文件。在此mxml文件上創建一個Script
元素,並將源設置爲ActionScript文件的相對路徑。在MXML應該是這樣的:
<?xml version = "1.0" encoding = "utf-8"?>
<s:Application xmlns:fx = "http://ns.adobe.com/mxml/2009"
xmlns:s = "library://ns.adobe.com/flex/spark"
xmlns:mx = "library://ns.adobe.com/flex/mx"
minWidth = "955"
minHeight = "600">
<fx:Script>
<![CDATA[
protected function button1_clickHandler (event : MouseEvent) : void {
// TODO Auto-generated method stub
hello();
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script source = "./scratch/MyFile.as" />
<s:Button label = "Show Alert" click = "button1_clickHandler(event)" />
</s:Application>
你會發現,在scratch.MyFile.as
動作腳本應用程序運行時執行。
您可以使用此方法將您的繪圖邏輯包含在您的應用程序中。外部ActionScript被視爲是由MXML生成的類的方法定義。
讓我在每個人跳過我之前告誡你。這是不是的最佳做法。有一些特定的用例可以使用Flex的這個特性。在我找到他們之前,讓我解釋一下爲什麼將「邏輯」與「視圖」分開的概念是不準確的。
Flex MXML文件不是僅查看代碼。它們是一種簡化ActionScript類定義的聲明性方言。當使用mxmlc或compc編譯Flex項目(分別是Flex應用程序和組件庫的編譯器程序)時,MXML文件被預編譯爲ActionScript類定義。如果您在Flash/Flex Builder/Ant /命令行編譯命令中將-keep-generated-actionscript
指令添加到您的編譯器選項中,編譯器會將生成的組成從指令性MXML文件派生的ActionScript類的類保留在項目中。因此,一個MXML文件成爲一個類。
在MXML的腳本塊中定義ActionScript是NOT將「邏輯」與「演示文稿」混合在一起。同樣,MXML 不是定義您的項目的演示文稿。它只是ActionScript語言的一個聲明性子集,可以更容易地定義表示類。作爲證明,您可以在MXML中定義ArrayCollections,Strings和Vectors。這些類是數據容器,與演示完全無關。
現在,把所有的ActionScript放在外部文件中的原因是不是一件好事是它使維護您的項目頭痛。不僅有人必須查找MXML中定義的組件,而且現在他們必須通過代碼庫來查找名爲Logic.as的腳本,該腳本相對於組件定義。
的使用情況,其中包括通過Script.source的外部ActionScript如下:
- 一組預定義的方法/屬性是在大量組分而不改變使用。不是將這些方法複製並粘貼到每個組件中,而是使用Script.source屬性定義一次方法並在整個應用程序中引用它們。
- 與use-case-1相似,但不同:需要混合使用。就像一個接口一樣,混合輸入是一組必須爲組件定義的方法,這些方法必須是可重用的,並定義顯式輸入參數和輸出參數。與接口不同,這些方法可以是任何名稱空間類型:protected,final,public,internal,mx_internal等,並且必須具有函數體,即具有
{}
功能塊內的代碼。對於「混入」的例子,想象一個可枚舉的對象,一個包含next(),previous(),reset()和iterator()方法的對象。當你想迭代對象的屬性時,你可以調用iterator(),它會返回一個調用next()和previous()的迭代器對象來從對象中獲取下一個和前一個屬性值。您可以將此功能混合到各種對象中並有用地使用它們。此外,您所包含的功能將被包含在其中的類中。它像AS3中的include指令一樣工作。
希望這可以幫助您理解Flex中「邏輯」和「表達」的含義,並幫助您解決特定問題。
我認爲你有它倒退。如果使用<mx:script>
標籤將.as
文件包含到.mxml
中,您將能夠看到其中定義的功能。 要解決該圖像,請將其設置爲id屬性。從這一點來說,它成爲一個可尋址如果使用ActiveScript定義如下
var image:Image = new Image()
這是沒有很明顯的是什麼關係MXML和AS之間的你在談論類,但最簡單的方法是創建MXML公共方法它返回Image。類似這樣的:
…
<mx:Script>
<![CDATA[
public function getImage():Image
{
return myImage;
}
]]>
</mx:Script>
<mx:Image id="myImage" />
…
因此,只要您可以從AS引用您的MXML,您可以調用此方法。
如果你想使用自己的繪圖類繪製的圖像的東西,我建議你把它添加到您的繪圖類的構造函數,像這樣:
/*********************************************
* Variables
*********************************************/
private var _myImageIWantToDrawIn:Image;
/*********************************************
* Properties
*********************************************/
public function set image(value:Image):void
{
_myImageIWantToDrawIn = value;
}
public function get image():Image
{
return _myImageIWantToDrawIn;
}
/*********************************************
* Constructor
*********************************************/
public function myDrawingclass(imageYouWantToDrawIn:Image)
{
_myImageIWantToDrawIn = imageYouWantToDrawIn;
}
這樣,你可以隨時訪問如果你想要的話,可以從這個類中抽取圖像並在其中繪製。 (如果你想繪製programmaticaly,你也可以訪問_myImageIWantToDrawIn.graphics)。如果要在運行時更改圖像,可以添加屬性。你可以簡單地說:myDrawingclass.image = imageYouWantToDrawIn;
編輯:這個以前的答案實際上與你所要求的是相反的,但我認爲這對你想做的事情會很好。如果你想訪問你的類,只需創建你的類的實例,並添加公共方法,而不是私人的。
和順便說一句:你的問題在你的標題是你的問題在你的文字的相反。 – 2011-04-14 16:10:40
- 1. 從其他.as文件訪問函數
- 2. Ruby類<<自變量,從另一個類訪問
- 3. 從類訪問SQLalchemy
- 4. 從類訪問Properties.Settings.Default?
- 5. 從UICollectionViewCell類訪問主類
- 6. 從超類訪問子類?
- 7. 從子類訪問父類
- 8. 從@RequestScoped類訪問@SessionScoped類?
- 9. AS3從外部訪問變量包含ActionScript文件.AS不是類
- 10. 訪問列表<Object>在子類
- 11. JBoss AS 7.1.1 Final - 訪問部署在JBoss AS 6中的EJB
- 12. AS 2.0類不能訪問自己的高度或寬度?
- 13. 訪問報告 - Recordsetclone as。記錄源
- 14. JBOSS 7 AS standalone.sh無法訪問jboss-modules.jar
- 15. Python,With ... as ... AST /符號訪問
- 16. 訪問EJB AS經由注射
- 17. 無法訪問列表<string>從另一個類
- 18. Flash/AS3:如何從Document類訪問<Instance Name>對象?
- 19. 無法從遠程機器訪問JBoss AS 7
- 20. 從外部AS訪問MXML中定義的元素
- 21. 從外部Javascript訪問'as'控制器屬性
- 22. 從windows機器上使用jconsole遠程訪問Wildfly AS
- 23. 從gdb訪問std :: complex <> python宏
- 24. 從Cycript訪問<objc/runtime.h>
- 25. 訪問download_url <a>屬性從
- 26. 從其他類訪問IBOutlet
- 27. 從UIView子類訪問UINavigationController
- 28. 從本地訪問Rect類
- 29. NetBeans:從MyAppView.java訪問類
- 30. 從類內訪問$ _SESSION
我可以問你準備做什麼嗎? – 2011-04-14 15:10:40
我想分開我的應用程序的用戶界面和邏輯 – Sergey 2011-04-14 17:47:26
那麼,繪製一些東西不是UI? – 2011-04-14 17:49:56