1

私はいくつかの配列コレクションを持っています (私はそれらの数を事前に知りません)。

var obj:MyObject = new MyObject();
var arc1:ArrayCollection = new ArrayCollection();
arc1.addItem(obj)
// same operation for my x arraycollections

最初のarraycollectionでオブジェクト「obj」を削除し、各arraycollectionで1つずつ削除せずに、他のすべてのarraycollectionsでも自動的に削除することは可能ですか?

4

2 に答える 2

0

すべての配列コレクションが共通のソースを共有すると仮定すると、ArrayCollections の代わりに ListCollectionViews を作成し、それらすべてが単一の ArrayCollection を指すようにします。

var masterCollection:ArrayCollection = new ArrayCollection();

for (var i:uint = 0; i < N; i++)
{
    slaveCollections[i] = new ListCollectionView(masterCollection);
}

スレーブコレクションからアイテムを追加または削除すると、マスターから追加または削除され、他のすべてのリストが CollectionEvent を介して更新されます。

于 2013-04-22T09:36:55.583 に答える
0

すべての配列コレクションが共通のソースを共有していないと仮定すると、要件を処理するために各コレクションにコレクション イベント リスナーを追加します。

for (var i:uint = 0; i < N; i++)
{
    slaveCollections[i] = new ArrayCollection();
    slaveCollections[i].addEventListener(CollectionEvent.COLLECTION_CHANGE, collectionListener);
}

...

private function collectionListener(event:CollectionEvent):void
{

   if (event.kind != CollectionEventKind.REMOVE)
        return

   for each(var slaveCollection:ArrayCollection in slaveCollections)
   {
      for each(var item:Object in event.items)
      {
          var itemIndex:int = slaveCollection.getItemIndex(item);
          if (itemIndex >= 0)
          {
              slaveCollection.removeItemAt(itemIndex);
          }
      }
   }

}

これにより、任意のコレクションで collection.removeItem(x) を呼び出すことができ、そのアイテムを他のコレクションから削除できます。

于 2013-04-22T09:44:49.740 に答える