Однако мне кажется пустой тратой запускать весь этот код при каждом вызове рендера, даже если в соответствующие свойства или дочерние свойства не было внесено никаких изменений.
Я полностью согласен.
Способ, которым я могу обойти это ради производительности (работая на мобильном устройстве), состоит в том, чтобы установить флаг в моем переопределенном updateDisplayList, который позволяет большую часть моего собственного размера / расположениякод запускается только в первый раз.
То, что я сделал - и это очень часто встречается в Flex Framework - это наличие свойства для каждого основного элемента, который необходимо изменить.Например, наш MX AutoCompleteComboBox имеет свойство с именем «downArrowVisible», и если вы установите его в значение false, оно будет скрывать стрелку вниз от отображения, а также изменяет размер textInput для распространения по всей ширине компонента.Если вы установите его в true;он будет позиционировать элементы, как обычный ComboBox.
Итак, всякий раз, когда свойство downArrowVisible изменяется, мы устанавливаем там флаг downArrowVisibleChanged;и использовать это свойство, чтобы определить, должен ли updateDisplayList изменять положение элементов.[Это немного сложнее, но это суть].По умолчанию для downArrowVisibleChanged задано значение true, поэтому во время начального запуска установки дочерние компоненты будут иметь размер и правильное расположение.
Это звучит очень похоже на то, что вы делаете;так как у меня никогда не было свойства флага, специфичного для updateDisplayList ().Я делаю свои флаги специфичными для определенного фрагмента макета и устанавливаю только те флаги, которые «больше не нужно менять» в updateDisplayList ().
Это плохая идея / большая ошибка?Я просто не вижу выгоды в том, чтобы запускать его каждый раз иначе, если я не ожидаю, что что-нибудь, что повлияет на изменение размера / положения, изменится.
Я думаю, что это кажется логичным подходом.Вы правы, нет необходимости в том, чтобы код компоновки работал последовательно каждый раз, когда компонент перерисовывает.
Если вы не будете изменять свойства своего пользовательского компонента во время выполнения и хотите, чтобы ваша подпрограмма updateDisplayList () запускалась один раз - и никогда больше - тогда я думаю, что вы можете связать с initialized свойство Flex Framework без добавления собственного логического значения.Если значение равно false, то компонент еще не прошел первоначальный процесс создания.Если значение истинно, то оно имеет.