【问题标题】:Why is 'textField' not instantiated when I subclass TextArea in Flex?为什么当我在 Flex 中子类 TextArea 时没有实例化“textField”?
【发布时间】:2009-04-26 22:38:49
【问题描述】:

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

不幸的是,当我创建子类的新实例时,此属性设置为null。我可能误解了super() 的工作方式,但我认为它会在构造函数完成后被实例化。

这是一个扩展 TextArea 的小 sn-p 代码:

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();

每次运行此代码时,ExtTestArea 中的 Alert 都会出现。

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

【问题讨论】:

    标签: apache-flex inheritance


    【解决方案1】:

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

    【讨论】:

    • 感谢您的指点。添加文本区域后,我看到了相同的行为。
    【解决方案2】:

    Flex SDK 自带源代码,所以你可以看一下这个字段是什么时候初始化的。它没有在构造函数中初始化,但是你会看到 createChildren() 实例化了一个新的 TextField,它在组件添加到布局容器时被调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-07
      相关资源
      最近更新 更多