1

我有几个数组集合(我事先不知道它们的数量),它们包含一个相同的对象(以及其他对象)。

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

是否可以在第一个数组集合中删除我的对象“obj”并在所有其他数组集合中自动删除它,而不在每个数组集合中一个一个地删除它?

4

2 回答 2

0

假设您所有的数组集合共享一个公共源,我将创建 ListCollectionViews 而不是 ArrayCollections 并让它们都指向一个 ArrayCollection,即:

var masterCollection:ArrayCollection = new ArrayCollection();

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

每当您从任何 slaveCollection 添加或删除项目时,它将从主服务器添加/删除,并且您的所有其他列表将通过 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 回答