2

カスタムコンポーネントを作成するときは、通常、セッター/ゲッターを使用し、「ダーティ」フラグを設定し、invalidateProperties()を呼び出してから、commitProperties()に実際の変更を処理させることにより、プロパティの変更を延期することがベストプラクティスであることを理解しています。

しかし、プロパティがSparkコンポーネントにのみ影響する場合、Sparkコンポーネントはすでにプロパティの変更を延期しているため、これは冗長ではないでしょうか。

たとえば、Spark Buttonを含むカスタムUIComponentがあり、ボタンのラベルを変更するbuttonLabelプロパティを公開したいとします。

private var _buttonLabel:String;
private var myBtn:Button;
private var _buttonLabelChanged:Boolean = false;
function set buttonLabel(lbl:String){
   _buttonLabel = lbl;
   _buttonLabelChanged = true;
   invalidateProperties();
}

したがって、buttonLabelプロパティを設定すると、最終的に次のようにトリガーされます。

override protected function commitProperties(){
    if(_buttonLabelChanged){
          myBtn.label = _buttonLabel;
         _buttonLabelChanged = false;
    }
}

しかし、Spark Buttonクラスの「label」のセッターはすでに無効化プロセスを使用しているため、上記のコードは無意味になりますね。それとも私は何かが足りないのですか?

4

1 に答える 1

1

しかし、プロパティがSparkコンポーネントにのみ影響する場合、Sparkコンポーネントはすでにプロパティの変更を延期しているため、これは冗長ではないでしょうか。

私はこれが本当の声明だとは思わない。Sparkコンポーネントは、MXコンポーネントと同じようにプロパティの変更を延期しません。

しかし、Spark Buttonクラスの「label」のセッターはすでに無効化プロセスを使用しているため、上記のコードは無意味になりますね。それとも私は何かが足りないのですか?

はい、すべてのスパークコンポーネントに独自の無効化サイクルがあるという事実を見逃しています。これは、あるMXコンポーネントに別のMXコンポーネントが含まれているMXコンポーネントと同じです。

はっきりしていませんが、あなたは2つの同じもの(MX無効化とSpark無効化)を見て、それらが異なると言っているようです。

于 2012-08-18T14:06:31.670 に答える