Flex Как отложить setStyle до следующего обновления? - PullRequest
1 голос
/ 27 мая 2009

У меня есть компонент, состоящий из двух частей, скажем, двух Hbox A и B в Vbox.

На конкретный звонок я хочу:

- Hide B with B.visible = false
- setStyle("borderSkin", FooBorderOn);

Проблема в том, что граница рисуется до изменения размера родительского Vbox, так что я получаю границу Вокруг Vbox с невидимым B:

.....................
.         A         .
.                   .
.                   .
.                   .
.     BLANK SPACE   .
.....................

Я бы хотел, чтобы граница окружала следующий обновленный размер vbox. Есть ли что-то вроде "сделать это после перерисовки"? в flex?

Большое спасибо

Ответы [ 4 ]

2 голосов
/ 27 мая 2009

Посмотрите на метод callLater. Это отложит вызов метода до следующего обновления кадра.

0 голосов
/ 06 мая 2010

Есть несколько способов отложить действия. Если вы сами разрабатываете компонент пользовательского интерфейса, взгляните на invalidateProperties / commitProperties. Это механизм, позволяющий не зацикливаться на циклах обновления: вы помечаете свойство, которое будет обновляться (обычно, сохраняя его во временной переменной и / или добавляя логическое значение xxxChanged), и вызываете invalidateProperties (). Затем Flex вызовет commitProperties () чуть позже - накапливая несколько изменений, которые могут повлиять друг на друга, - где вы сможете внести свои реальные изменения.

callLater также может быть вариантом, хотя обычно это не так "позже", как можно подумать :) (Это следующее обновление экрана, которое может произойти довольно скоро, даже перед другими действиями в очереди)

Однако в вашем случае, исходя из вашего описания, я думаю, вы просто пропустили свойство includeInLayout. Контейнеры решат отобразить (видимым) или освободить место для (includeInLayout) для объектов на основе этих двух отдельных свойств. См. Также Предотвращение размещения скрытых элементов управления .

0 голосов
/ 27 мая 2009

Даже если вы прячете VBox, HBox B все еще там. Я бы уменьшил высоту VBox, установил для VerticalScrollPolicy значение false (чтобы полоса прокрутки не отображалась) или просто удалил HBox из VBox (myVBox.removeChild ()).

0 голосов
/ 27 мая 2009

Это был callLater ... У меня это было где-то в памяти

...