Flex如何延迟setStyle直到下次更新?

时间:2009-05-26 23:24:50

标签: flex actionscript-3 user-interface components

我有一个由两部分组成的组件,比如说Vbox中有两个Hbox A和B.

在我想要的特定电话上:

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

问题是在调整父Vbox大小调整之前绘制边框, 所以我最终得到一个Vbox周围的边框,B看不见:

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

我希望边界能够围绕vbox的下一个更新大小。 有没有像“那样更好地重绘”?在flex?

非常感谢

4 个答案:

答案 0 :(得分:2)

看一下callLater方法。这将推迟方法调用,直到下一帧更新。

答案 1 :(得分:0)

这是callLater ......我把它放在我的记忆中

答案 2 :(得分:0)

即使你隐藏了VBox,HBox B仍然存在。我会缩小VBox的高度,将VerticalScrollPolicy设置为false(这样滚动条不会显示),或者只是从VBox中删除HBox(myVBox.removeChild())。

答案 3 :(得分:0)

有几种方法可以推迟采取行动。如果您自己开发UI组件,请查看invalidateProperties / commitProperties。这是一种不会卡在更新循环中的机制:标记要更新的属性(通常通过将其存储在temp var中和/或添加xxxChanged布尔值)并调用invalidateProperties()。然后,Flex将稍后调用commitProperties() - 累积可能相互影响的几个更改 - 您可以在其中进行实际更改。

callLater也是一个选项,但通常它并不像人们想象的那样“晚一点”:) (这是下一次屏幕刷新,可能很快就会发生,甚至在其他排队行动之前)

但是在您的情况下,根据您的描述,我认为您错过了“includeInLayout”属性。容器将决定基于这两个单独的属性显示(可见)或为对象腾出空间(includeInLayout)。另请参阅Preventing layout of hidden controls