ArrayCollectionで配列の変更を検知するサンプル
mx.collections.ArrayCollectionを使うと配列の変更をイベントリスナーの仕組みで検知することができます。
- コンストラクタでソースとなる配列を指定してArrayCollectionを作成し、
- イベントリスナーを設定した上で、
- ArrayCollectionのAPIを呼び出して配列を更新すると、イベントが通知されます。
- ただし、コンストラクタで指定した配列を直接編集すると通知はされないので注意。
// 結果の表示用 var stdout:TextField = new TextField(); stdout.width = 500; stdout.height = 500; addChild(stdout); stdout.text = ""; // ArrayCollectionを作成。引数でソースとなる配列を渡す。 var array:ArrayCollection = new ArrayCollection([1,2,3,4,5]); // リストの更新リスナを設定 array.addEventListener( CollectionEvent.COLLECTION_CHANGE, function(ev:CollectionEvent):void{ stdout.text += <b>kind: {ev.kind} / items: {ev.items} / index: {ev.location}</b>.toString(); stdout.text += "\n"; }); // 値の設定 / 取得 for (var i:int=0; i < array.length; i++ ) { stdout.text += array.getItemAt(i) + ", "; // 読み込み } stdout.text += "\n"; array.setItemAt(9, 2); // 設定 array.addItem(6); // 追加 array.removeItemAt(4); // 削除
実行結果はこちら。なお、実行する操作に応じて「event.items」の値は変わります。詳細はCollectionEvent#itemを参照。
Proxyを使ってもできるけど、さくっと使いたい場合に便利ですな。