2009-04-26 69 views
1

我正在嘗試使用TextArea和繼承來實現受保護的textField屬性上的一些附加功能。爲什麼'textField'沒有實例化時我在Flex中的TextArea的子類?

不幸的是,當我創建子類的新實例時,此屬性設置爲null。我可能誤解了super()的工作方式,但我認爲它會在構造函數完成後實例化。

這裏有一小段代碼延伸TextArea

public final class ExtTextArea extends TextArea { 

    public function ExtTextArea() { 
    super(); 
    } 

    public function testTextField():void { 
    if (textField == null) 
     Alert.show("null!"); 
    } 
    } 
} 

調用的代碼很簡單:

var extTextArea:ExtTextArea = new ExtTextArea(); 
extTextArea.testTextField(); 

ExtTestAreaAlert似乎我每次運行此代碼的時間。

這是爲什麼?我還需要做些什麼來訪問textField屬性?

回答

2

由於文本框是「內部UITextField呈現此TextArea文本」我相信它會保持直到您通過.addChild(...)其添加到顯示器。我運行了一個快速測試,以驗證一旦我將它添加到顯示器,它不再爲空。您可能需要爲「創建完成」事件添加一個事件處理程序,並在該點進行調整(我認爲)。

+0

感謝您的指針。一旦添加了文本區域,我看到了相同的行爲。 – bedwyr 2009-04-27 00:40:42

1

Flex SDK附帶源代碼,因此您可以查看並查看此字段何時初始化。它不在constrcutor中初始化,但是您會看到由createChildren()實例化的新TextField,將組件添加到佈局容器時調用該TextField。

相關問題