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がまだリセットされていないためですcommitProperties 呼び出し。

4

1 に答える 1

1

実行フローによると、論理的には、処理と状態の有効な状態への設定が完了した後にのみ、「変更されていないものとしてマークする」(フラグをリセットする) ように見えます。同じフラグを使用して他のプロパティを無効にする必要がある場合は、これを行うための別のフラグが必要です。

更新:本当の問題を誤解して申し訳ありません。ここで、invalidatePropertiesFlag の場合、commitProperties を呼び出す前に false に設定する必要があることに同意する必要があります。一方、無効化メソッドは のような方法で呼び出す必要がありますcallLater()

于 2009-12-25T14:35:12.413 に答える