当我在Flex中继承TextArea时,为什么'textField'没有实例化?

时间:2009-04-26 22:38:49

标签: flex inheritance

我正在尝试使用TextArea和继承来在受保护的textField属性上实现一些其他功能。

不幸的是,当我创建子类的新实例时,此属性设置为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();

每次运行此代码时,都会显示Alert中的ExtTestArea

这是为什么?我需要做些什么来访问textField属性吗?

2 个答案:

答案 0 :(得分:2)

由于 textField 是“呈现此TextArea文本的内部UITextField”,我相信它将保持 null ,直到您通过将其添加到显示中。的addChild(...)。我运行了一个快速测试来验证一旦我将它添加到显示器,它就不再是空的。您可能希望向“创建完成”事件添加事件处理程序并在该点调整它(我认为)。

答案 1 :(得分:1)

Flex SDK附带源代码,因此您可以查看此字段的初始化时间。它没有在constrcutor中初始化,但是你会看到一个新的TextField由createChildren()实例化,当组件被添加到布局容器时调用它。