让我们参考 Flex 3 (Flex 4) SDK 的 mx.core.UIComponent 类中的方法“validateProperties”列表
public function validateProperties():void
{
if (invalidatePropertiesFlag)
{
commitProperties();
invalidatePropertiesFlag = false;
}
}
我的问题是:
为什么在commitProperties调用之后会重置脏标志invalidatePropertiesFlag而不是在此调用之前?
我推测这是因为:
1)把脏标志放在IF块的末尾,简直是人生大事;
2) 如果commitProperties中的代码引发了RTE,在Flash Player 播放下一帧时,我们仍然有机会执行commitProperties中的代码,这一次可能代码不会引发RTE。
我问这个问题的原因是以下事实:
如果commitProperties中的代码将尝试使用脏标志和invalidateProperties无效调用来使另一个UIComponent的属性无效,则此无效调用将不会添加到mx.managers.LayoutManager.invalidatePropertiesQueue ,因为之前尚未重置脏标志invalidatePropertiesFlag提交属性调用。