2010-05-25 73 views
0

我想知道<mx:Script>標籤中包含的代碼會發生什麼情況。如果我定義了一個函數tehre,它就成爲生成的類的成員函數。但我注意到,如果我只是在那裏編寫一些(靜態的)方法調用(具體來說,我稱爲Font.registerFont()),編譯器似乎可以。它工作正常,但我對此感到內疚,因爲我不知道到底發生了什麼以及何時執行代碼。Script標籤中的代碼在產生的AS類中出現在哪裏?

回答

1

根據www.Flextras.com's answer的建議,我保留了生成的Actionscript類並看了一下。 <mx:Script>標籤中的代碼簡單地放在課堂上。知道了,我可以挖掘到Flex livedocs並在section about class definitions整個下段傳來:

的ActionScript 3.0允許包括在一類體不僅定義,而且語句。在類體內但在方法定義之外的語句只執行一次 - 當第一次遇到類定義並創建關聯的類對象時。

因此,把語句的<Script>標籤內的MXML文件就相當於把代碼放在一個static塊在Java類定義。

3

MXML正式是一種ActionScript生成語言。所以,Flex編譯器會將所有MXML轉換爲ActionScript。

如果你想看看會發生什麼;將「keep-generated-actionscript」參數添加到編譯器中,然後您可以查看生成的ActionSCript代碼。

http://livedocs.adobe.com/flex/3/html/compilers_14.html#157203

除此之外;我真的不明白你的問題。爲什麼靜態方法會讓你感到內疚?

+0

這不是靜態方法,而是我不知道在哪裏轉儲的代碼片斷會執行。通常情況下,我會將它放在某個事件處理程序中,但我無法確定哪種事件適合。 – 2010-05-25 11:50:12

+2

在這種情況下,您應該閱讀Flex Component LifeCycle並使用這些方法/事件,以便在您需要時執行代碼。 http://livedocs.adobe.com/flex/3/html/help.html?content=ascomponents_advanced_2.html – JeffryHouser 2010-05-25 13:52:49

+0

這也是很好的建議,謝謝。儘管我放在那裏的特定代碼完全是黑客,但它甚至不需要處理組件,我只是試圖使SWC的字體可用於應用程序的CSS。我認爲整個事情是一些醜陋的代碼味道,應該以完全不同的方式解決。但這是一個不同的故事。 – 2010-05-25 20:30:55

相關問題