2009-04-26 48 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。