2009-05-26 44 views
1

我有一個組件由兩部分組成,比方說兩個Hbox A和B在一個Vbox中。Flex如何延遲setStyle直到下次更新?

在一個特定的呼叫我想:

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

的問題是邊境拿得出父VBOX的大小調整發生之前, 所以我最終與周圍的邊框VBOX爲B無形:

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

我想邊界以圍繞下一個更新的大小的vbox。 有沒有像「那樣做重繪」?在flex?

非常感謝

+0

奇怪的是,即使使用callLater,它的空白仍然存在,但是如果我再次調用skinBorder syle形成一個單獨的按鈕事件,它將只能用A對Vbox進行繪製。設置B可見虛假需要比幀長嗎? – coulix 2009-05-26 23:38:43

回答

2

看看callLater方法。這將推遲一個方法調用,直到下一個幀更新。

0

這是使用callLater ......我有它在我的記憶某處

0

即使你隱藏的VBox,HBox中B是仍然存在。我會縮小VBox的高度,將VerticalScrollPolicy設置爲false(以便滾動條不會顯示),或者只是從VBox(myVBox.removeChild())中簡單地刪除HBox。

0

推遲操作有幾種方法。如果您自己開發UI組件,請查看invalidateProperties/commitProperties。這是一種不會陷入更新循環的機制:您需要標記要更新的屬性(通常通過將其存儲在臨時變量中和/或添加xxxChanged布爾值)並調用invalidateProperties()。然後,Flex會稍後調用commitProperties() - 累積可能會相互影響的幾個更改 - 您可以在其中進行實際更改。

callLater也將是一種選擇,但通常它不是「以後」的人會認爲:) (這是在下次刷新屏幕,這甚至可能先於其他排隊的動作太快了一點,)

然而在你的情況下,從你的描述中,我想你錯過了「includeInLayout」屬性。容器將根據這兩個單獨的屬性決定爲對象顯示(可見)或爲(includeInLayout)騰出空間。另請參閱Preventing layout of hidden controls