我有几个arraycollections(我不提前知道它们的数字),它们包含一个相同的对象(等等)。
var obj:MyObject = new MyObject();
var arc1:ArrayCollection = new ArrayCollection();
arc1.addItem(obj)
// same operation for my x arraycollections
是否可以在第一个arraycollection中删除我的对象“obj”并自动将其删除在所有其他arraycollections中,而不是逐个删除每个arraycollection中的对象?
答案 0 :(得分:0)
假设你的所有数组都共享一个公共源,我会创建ListCollectionViews而不是ArrayCollections,并让它们都指向一个ArrayCollection,即:
var masterCollection:ArrayCollection = new ArrayCollection();
for (var i:uint = 0; i < N; i++)
{
slaveCollections[i] = new ListCollectionView(masterCollection);
}
每当您从任何slaveCollection添加或删除项目时,它都将从主数据库中添加/删除,所有其他列表将通过CollectionEvent更新。
答案 1 :(得分: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)并将该项目从其他集合中删除。