1

Flexには次のような値オブジェクトがあります。

[バインド可能]

public class MyVO
{
    public var a:ArrayCollection;
    public var b:ArrayCollection;
    private var timeSort:Sort;

    public function ShiftVO(){
        timeSort = new Sort();
        timeSort.compareFunction = sortDates;
    }

public function get times():ArrayCollection{        
    var ac:ArrayCollection = new ArrayCollection(a.toArray().concat(b.toArray()));

    ac.sort = timeSort;
    ac.refresh();

    return ac;
}   

それはゲッターメソッドについてです。ゲッターのデータをデータグリッドに表示し、の値を変更したり、ビューを更新しaたりするたびにb表示します。どうすればこれを達成できますか?現在、ビューは自動的に更新されません。新しい値を表示するには、ビューを再度開く必要があります。

4

1 に答える 1

3

プロパティを作成する[Bindable]と、そのセッターが呼び出されるたびに (つまり、プロパティが更新されると)、Flex はゲッターを読み取ります。setter を宣言していないため、プロパティの値が更新されたことを Flex が認識する方法はありません。

プロパティで [Bindable] タグを使用するには、setter メソッドと getter メソッドの両方を定義する必要があります。セッター メソッドのみを定義すると、データ バインディング式のソースとして使用できない書き込み専用プロパティが作成されます。getter メソッドのみを定義する場合は、[Bindable] メタデータ タグを挿入せずに、データ バインディング式のソースとして使用できる読み取り専用プロパティを作成します。これは、 const キーワードを使用して定義された変数をデータ バインディング式のソースとして使用する方法と似ています。

空のセッターを定義して、a または b を更新するたびに呼び出すことができます。

public function set times(ac:ArrayCollection):void { }

//somewhere else in the code:

a = someArrayCol;
/** 
 * this will invoke the setter which will in turn 
 * invoke the bindable getter and update the values 
 * */
times = null;

プロパティの代わりにクラスで Bindable を使用していることに気付きました: Bindable タグをこのように使用すると、

変数として定義したすべてのパブリック プロパティ、およびセッター メソッドとゲッター メソッドの両方を使用して定義されたすべてのパブリック プロパティをバインド式のソースとして使用できます。

したがって、セッターを定義しない限り、クラス全体がバインド可能として宣言されていても、プロパティはバインド可能ではありません。

于 2010-08-11T14:39:20.140 に答える