1

flex 3では、階層的なデータ構造があります。その内容をツリーで表示したいのですが。私の問題は、データが子ノードから計算されたノードがあることです。子のデータが変更された場合に、それらの親ノードに自動的に変更を加えるように階層を構築するにはどうすればよいですか?例えば:

  • すべてのノードには警告フラグがあります。子の警告フラグの一部がtrueに変更された場合、親の警告フラグは自動的にtrueに設定されて変更されます。
  • ノード整数フィールドは子整数フィールドの合計であり、子のいずれかが変更された場合、親整数フィールドはその合計をすぐに「計算」します。

優れた構造変更が自動的に行われる簡単な解決策はありますか、それともいくつかのカスタム関数を作成する必要がありますか?

ありがとう!

4

1 に答える 1

0

これを行うには、次のパターンに従います。

  1. 親クラスの値を計算するためのメソッドを作成し、イベントとバインドできるようにします。
  2. 親で、子コレクションが変更されたときのイベントリスナーを追加します。これを行うには、子コレクションはArrayCollectionなどである必要があります。
  3. 変更イベントをインターセプトするときは、手順1で説明したメソッドのBindableメタデータに添付されているイベントを発生させます(または条件付きで発生させます)。

これにより、子が更新されるたびに、親の集約プロパティを監視しているUIが更新されます。

次に例を示します。

public class Parent
{
    private var children:ArrayCollection = new ArrayCollection();

    public function Parent()
    {
        children.addEventListener(
            CollectionEvent.COLLECTION_CHANGE, 
            function(evt:CollectionEvent):void
            {
                if (...)
                {
                    dispatchEvent(new Event("warningStateChanged"));
                }
            }
        );
    }

    [Bindable("warningStateChanged")]
    public function containsWarnings():Boolean
    {
        for each (var child:Child in children)
        {
            if (child.hasWarning)
            {
                return true;
            }
        }
        return false;
    }
}
于 2009-06-17T17:28:45.217 に答える