Почему не создается экземпляр textField при создании подкласса TextArea во Flex? - PullRequest
1 голос
/ 27 апреля 2009

Я экспериментирую с 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 ]

2 голосов
/ 27 апреля 2009

Поскольку textField является «внутренним UITextField, который отображает текст этой TextArea», я считаю, что он останется нулевым , пока вы не добавите его на дисплей с помощью .addChild ( ...) . Я провел быстрый тест, чтобы убедиться, что после добавления его на дисплей он больше не равен нулю. Возможно, вы захотите добавить обработчик события к событию «создание завершено» и настроить его в этот момент (я думаю).

1 голос
/ 27 апреля 2009

Flex SDK поставляется с исходным кодом, так что вы можете посмотреть, когда инициализируется это поле. Он не инициализируется в constrcutor, но вы увидите, что создан новый TextField методом createChildren (), который вызывается при добавлении компонента в контейнер макета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...