ArrayCollection.setItemAt делает некоторые забавные вещи - PullRequest
0 голосов
/ 12 октября 2010

Я пытаюсь поменять два элемента в 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 Ответ

4 голосов
/ 12 октября 2010

Это потому, что вызов getItemAt для установки curItem и swapItem приводит к ссылкам на объекты в ArrayCollection, а не на сами объекты. Когда вы изменяете объект с помощью первого setItemAt, ваша ссылка также изменяется. В этот момент и curItem, и swapItem, вероятно, ссылаются на один и тот же объект. Я бы подошел к этому по-другому и вместо этого использовал бы removeItemAt и addItemAt, чтобы вы работали с объектами, а не со ссылками. Надеюсь, это поможет.

...