ArrayCollection.setItemAt正在做一些有趣的事情

时间:2010-10-11 21:42:43

标签: flex arraycollection

我正在尝试使用此代码交换ArrayCollection中的两个项目。

private function swapCollectionElements(collection:ArrayCollection, fromIndex:uint, toIndex:uint) : void 
{
    var curItem:Object = collection.getItemAt(fromIndex);
    var swapItem:Object = collection.getItemAt(toIndex);

    collection.setItemAt(curItem, toIndex);
    collection.setItemAt(swapItem, fromIndex);

    collection.refresh();
}

调试代码时,我可以看到curItem和swapItem是正确的对象,但是当我第一次使用setItemAt时,它取代了我想要的那个,但也取代了我不想要的那个。任何想法在这里发生了什么?

1 个答案:

答案 0 :(得分:4)

这是因为调用getItemAt来设置curItem和swapItem会导致对ArrayCollection中对象的引用而不是对象本身。使用第一个setItemAt更改对象时,您的引用也会更改。此时curItem和swapItem可能都引用同一个对象。我会采用不同的方法,而是使用removeItemAt和addItemAt,这样你就可以使用对象而不是引用。希望有所帮助。