public function create():ArrayCollection{
var index:int = 0;
var data:ArrayCollection = new ArrayCollection();
var length:int = originalData.length;
for(index; index < length; index++){
data.addItem(originalData[index]);
}
return data;
}
- originalData - это исходное состояние моих данных из базы данных.
- data - это копия originalData, которая использовалась в качестве поставщика для моего компонента List.
- Есть кнопка, которую я использую для вызова функции create () выше, это означает, что я хочу отменить все изменения в данных и вернуться ко всему, что у меня есть в originalData.
Но когда я отлаживаюВ моей функции originalData есть все изменения, сделанные в данных.
Когда я использую
list.selectedItem.thing = "new string";
должен изменять данные [index] .thing, потому что данные мой List.dataprovider.но он также изменяет originalData [index] .thing, и эта коллекция не использовалась ни для чего, кроме как для создания собственной копии!
Я не знаю, почему это происходит.Я не знал, как сформулировать это поведение как запрос Google.
Пожалуйста, если вы не понимаете вопрос, прокомментируйте его, чтобы я мог попытаться сделать его более понятным.Это заняло больше времени, чем его функциональность.
РЕДАКТИРОВАТЬ:
Я также пробовал это, но это не работает:
public function create():ArrayCollection{
var index:int = 0;
var data:ArrayCollection = new ArrayCollection();
var length:int = originalData.length;
for(index; index < length; index++){
// initializing a Item object.
var dataItem:Item = new Item();
dataItem = originalData[index] as Item;
data.addItem(dataItem);
}
return data;
}
РЕДАКТИРОВАТЬ 2:
Основываясь на ваших ответах и некоторых исследованиях, я придумал эту универсальную функцию для копирования arrayCollections из пользовательских объектов.
public static function copy(objectClassName:String, objectClass:Class, arrayCollection:ArrayCollection):ArrayCollection{
var index:int = 0;
var length:int = arrayCollection.length;
var copy:ArrayCollection = new ArrayCollection();
for(index; index < length; index++){
registerClassAlias(objectClassName,objectClass);
copy.addItemAt(ObjectUtil.copy(arrayCollection.getItemAt(index)) as objectClass,index);
}
return copy;
}