0

Flex(Flash Builder 4)では、配列コレクション内の何かが変更されたかどうかを知る方法が必要です。

カスタムオブジェクトがあります:

[バインド可能]publicvar _myobject:MyObject;

これは基本的に、さまざまなStringプロパティとNumberプロパティの束を含む単なるクラスです。

プロパティのいずれかが変更されたかどうかを知るための信頼できる方法が必要です。たとえば、プロパティをユーザーインターフェイス(フィールド)にバインドしていますが、一部のプロパティをコードで変更することもできます。

これを行う方法はありますか?ChangeWatcherを見つけましたが、StringやNumberなどの単一の単純なプロパティのみを調べているようです。オブジェクト内のすべてのプロパティの変更を監視または検出する必要があります。できれば、すべてのプロパティにChangeWatcherイベントを追加する必要はありません。これは可能ですか?

4

3 に答える 3

1

バインド可能にしたい特定のプロパティにバインドイベントをディスパッチする方がおそらく良いでしょう。さらに良いことに、カスタムバインディングイベントをディスパッチして、バインドされているすべてのものを「これは私が気にかけているプロパティですか?」でフィルタリングする必要がないようにします。Flash Builder 4.5を使用すると、これを行うのは非常に簡単です。変数名を選択してCtrl-1を押し、[ゲッターとセッターの作成]を選択し、ゲッターとセッターを選択して、[バインド可能]と[カスタムイベントの作成]をオンにします。

これにより、次のようなコードが作成されます。

private var _yourProperty:String;

[Bindable (event='yourPropertyChange')]
public function get yourProperty():String {
   return _yourProperty;
}

public function set yourProperty(value:String):void {
   if (value !=== _yourProperty) {
     _yourProperty = value;
     dispatchEvent(new Event('yourPropertyChange'));
   }
}

これは、Bindableタグを単独で使用する場合に、FlashBuilderがバックグラウンドで生成するコードよりもはるかに冗長でパフォーマンスが低くなります。

于 2012-05-09T00:39:53.060 に答える
0

定義されたクラスをVO/DAOとして使用し、[Bindable]タグをクラスに適用すると、すべてのプロパティがバインドされます(読み取り/書き込みである限り)。

匿名オブジェクトの検出はせいぜい困難であり、コンパイラの型チェックを失うという頭痛の種を追加することは言うまでもありません。

超基本的な例:-重要なのは、それをディスパッチャに結び付けることです。これにより、内部的にPropertyChangeEventを送信できます。

 [Bindable]
 public class Actor extends EventDispatcher 
 {
      public var fName:String;
      public var lName:String;
      public var age:uint;

      public function get displayName():String
      {
          return lName +', '+ fName;
      }

      public function Actor()
      {
          super();
      }
 }
于 2012-05-08T20:31:52.023 に答える
0
public class BindableDictionary extends EventDispatcher {
        public function BindableDictionary() {
            super();
        }

        public var dictionary:Dictionary = new Dictionary();

        [Bindable("change")]
        public function get(key:Object):Object {
            return dictionary[key];
        }

        public function put(key:Object, value:Object):void {
            dictionary[key] = value;
            dispatchEvent(new Event(Event.CHANGE));
        }
    }

多分このクラスはあなたにいくつかの新しいアイデアを与えるでしょう

于 2012-05-09T08:19:01.503 に答える