1

让我们参考 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提交属性调用。

4

1 回答 1

1

根据执行流程,只有在处理并将状态设置为有效条件完成后,它才会在逻辑上看起来“标记为未更改”(重置标志)。如果应该使用相同的标志使某些其他属性无效 - 那么应该有单独的标志来执行此操作。

更新:抱歉误解了真正的问题。我必须在这里同意你,在 invalidatePropertiesFlag 的情况下,它应该在调用 commitProperties 之前设置为 false。同时,您应该通过类似callLater().

于 2009-12-25T14:35:12.413 回答