Разработка

Жизненный цикл Flex компонентов

Жизненый цикл компонентов во flex, похож на тот, который был в предыдущей 2-ой версии, когда вы создаёте хранилище, добавляете дочерние объекты, задаёте размер и генерируете событие. Следующие четыре метода играют роль для отображения компонента.

  1. commitProperties()
  2. measure()
  3. layoutChrome()
  4. updateDisplayList()

Комментарии зелёного цвета оказывают методы и события, которые выполняются над или самим объектом, в то время как синие комментарии показывают методы и события, которые выолняются родительским или над родительским контейнером.

На примере следующих шагов будет рассмотрен жизненный цикл компонента Button.

  • Данное описание верно, если текущий компонент находиться в контейнере, т.е. свойсво parent будет ссылаться на контенер(объект типа DisplayObjectContainer)
    //– Свойство класса UIComponent
  • Получение настроек стиля отображения компонента
  • Генерируется событие preinitialize для компонента.

//– Событие preinitialize event(mx.events.FlexEvent) обрабатывается, когда UIComponent в очень "сыром" состоянии, в данном состоянии на каких дочерних объектов не существует

  • Вызывается метод createChildren().

createChildren это protected метод класса UIComponent, который необходимо переписать, когда нам нужно переписать, если мы создаём подкласс, наследуемый от UIComponent. Also from within an override of the createChildren() method, you call the addChild() method to add each child object.

Вам не надо вызывать этот метод на прямую.Flex вызовет createChildren() method по запросу, при вызове метода addChild(), при добавлении нового компонента в родительский.

  • Вызываются методы invalidateProperties(), invalidateSize(), и invalidateDisplayList(), которые инициируют последующие вызовы методов commitProperties(), measure(), или updateDisplayList() при последующем отображении.

invalidateProperties() помечает компонент дла дальнейшего вызова метода commitProperties() при дальнешем отображении.

invalidateSize () помечает компонент дла дальнейшего вызова метода measure() при дальнешем отображении.

invalidateDisplayList () помечает компонент дла дальнейшего вызова метода updateDisplayList() при дальнешем отображении.

Исключением из этого правила является метод measure(), который не вызывается Flex, если пользователь выставил ширину и/или высоту компонента.

  • Генерируется событие initialize для компонента. В это время все дочерние компоненты инициализированы, но размеры ещё не вычисленны для отображения. Вы можете использовать это событие для дополнительной обработки компонента перед тем как он будет отображён.

Событие Initizlize генерируется, когда завершено построение компоента и все свойства компонента уже определены.

После фазы инициализции, свойства определены, размеры компонента заданы, размещён в родительском компоненте, и прорисован. После этого генерируется событие creationComplete.

  • Генерируется событие childAdd для родителького компонента.

Событие childAdd когда вызывается метод addChild() или addChildAt(). В то время, когда это событие посылается, дочерний объект инициализирован, но высота его и ширина не расчитаны, дочерний объект не размещён и не прорисован. Если вы хотите отследить состояние, когда дочерний объект полностью инициализирован, расчитан, зарегистрируйте слушатель на событие creationComplete дочернего объекта.

  • Генерируется событие initialize для родительского объекта.

Генерируется, когда завершено построение компоента и все свойства компонента уже определены. После фазы инициализции, свойства определены, размеры компонента заданы, размещён в родительском компоненте, и прорисован. После этого генерируется событие creationComplete.

  • В процессе последующей обработке, Flex выполняет следующие операции:
    • Вызывает метод commitProperties() для текущего компонента.
      метод commitProperties() расчитывает свойства компонента . Вам не надо вызывать этот метод напрямую. Flex вызывает этот метод commitProperties(), когда вы используете метод addChild() родительского контейнера, или если вы ранее вызвали метод invalidateProperties() для компонента. Метод commitProperties() вызывается перед вызовом метода measure(). Это позволяет установить свойства, которые могут быть потом использованы в методе measure().
    • Вызывает метод measure() компонента.
      Метод measure() рассчитывает стандартные размеры, и, по требованию, стандартный минимальный размер, компонента. Это дополнительный метод, который вы можете переписать этот метод, создавая подкласс клсса UIComponent
      .
      Стандартная реализация метода measure() устанавливает measuredWidth, measuredHeight, measuredMinWidth, и measuredMinHeight в 0.
    • Вызывает метод (Adobe help отмечает этот метод в классе UIComponent, в ситуации, когда объект является контейнером) layoutChrome() контейнера компонента.
      Класс Container, и некоторые его наследники используют метод layoutChrome(), чтобы определить границы области вокруг контейнера.
    • Вызывает метод updateDisplayList().
      Метод updateDisplayList() опредеяет размеры и позицию дочерних объектов, ореентируюся на ранее определённые свойства и настройки стиля, а так же прорисовывает все графические элементы, которые необходимы для отображения компонента. Родительский компонент определяет размеры компонента самостоятельно.
    • Генерируется событие updateComplete для компонента.
      Событие генерируется после того, как методы commitProperties(), measure(), and updateDisplayList() были вызваны (если это необходимо).
      Это последний момент, когда можно изменить компонент, до того, как он будет прорисован. В данный момент, все свойства определены, заданы размеры компонента и он был размещён.
  • Flex генерирует дополнительные события для рендерера, если методы commitProperties(), measure(), или updateDisplayList() вызывают методы invalidateProperties(), invalidateSize(), или invalidateDisplayList().
  • После того, как последнее событие рендерера обработано, Flex выполняет следующие действия:
    • Делает компонент видимым, устанавливая свойство visible в true.
    • Генерирует событие creationComplete для компонента. Для компонента определены размеры и он размещён. Это событие генерируется только один раз, только тогда, когда компонент созддаётся.
    • Генерируется событие updateComplete для компонента. Flex дополнительно генерирует событие updateComplete, всегда, когда меняется хотя бы одно из следующего: размещение, позиция, размер или визуальные характеристикикомпонента - и компонент обновляется для прорисовки.
Переведоно со статьи Flex Component Life Cycle (откырвается в новом окне)