должен ли макет updateDisplayList позиционировать ВСЕ при каждом вызове рендера? - PullRequest
1 голос
/ 06 января 2012

Итак, updateDisplayList предназначен для размещения, позиционирования и определения размера дочерних компонентов. Однако мне кажется пустой тратой запускать весь этот код при каждом вызове рендера, даже если в соответствующие свойства или дочерние свойства не было внесено никаких изменений.

Чтобы обойти эту проблему ради производительности (работая на мобильных устройствах), я могу установить флаг внутри моего переопределенного updateDisplayList, который позволяет большей части моего собственного кода определения размера и позиционирования запускаться только в первый раз.

Это плохая идея / большая ошибка? Я просто не вижу выгоды в том, чтобы запускать его каждый раз иначе, если я не ожидаю, что что-нибудь, что повлияет на изменение размера / расположения, изменится.

1 Ответ

0 голосов
/ 06 января 2012

Однако мне кажется пустой тратой запускать весь этот код при каждом вызове рендера, даже если в соответствующие свойства или дочерние свойства не было внесено никаких изменений.

Я полностью согласен.

Способ, которым я могу обойти это ради производительности (работая на мобильном устройстве), состоит в том, чтобы установить флаг в моем переопределенном updateDisplayList, который позволяет большую часть моего собственного размера / расположениякод запускается только в первый раз.

То, что я сделал - и это очень часто встречается в Flex Framework - это наличие свойства для каждого основного элемента, который необходимо изменить.Например, наш MX AutoCompleteComboBox имеет свойство с именем «downArrowVisible», и если вы установите его в значение false, оно будет скрывать стрелку вниз от отображения, а также изменяет размер textInput для распространения по всей ширине компонента.Если вы установите его в true;он будет позиционировать элементы, как обычный ComboBox.

Итак, всякий раз, когда свойство downArrowVisible изменяется, мы устанавливаем там флаг downArrowVisibleChanged;и использовать это свойство, чтобы определить, должен ли updateDisplayList изменять положение элементов.[Это немного сложнее, но это суть].По умолчанию для downArrowVisibleChanged задано значение true, поэтому во время начального запуска установки дочерние компоненты будут иметь размер и правильное расположение.

Это звучит очень похоже на то, что вы делаете;так как у меня никогда не было свойства флага, специфичного для updateDisplayList ().Я делаю свои флаги специфичными для определенного фрагмента макета и устанавливаю только те флаги, которые «больше не нужно менять» в updateDisplayList ().

Это плохая идея / большая ошибка?Я просто не вижу выгоды в том, чтобы запускать его каждый раз иначе, если я не ожидаю, что что-нибудь, что повлияет на изменение размера / положения, изменится.

Я думаю, что это кажется логичным подходом.Вы правы, нет необходимости в том, чтобы код компоновки работал последовательно каждый раз, когда компонент перерисовывает.

Если вы не будете изменять свойства своего пользовательского компонента во время выполнения и хотите, чтобы ваша подпрограмма updateDisplayList () запускалась один раз - и никогда больше - тогда я думаю, что вы можете связать с initialized свойство Flex Framework без добавления собственного логического значения.Если значение равно false, то компонент еще не прошел первоначальный процесс создания.Если значение истинно, то оно имеет.

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