Проблема ArrayCollection в flex
У меня есть коллекция массивов, в которую я добавляю различные значения модели, как показано ниже.
var ob:Object=new Object();
ob.name=string1;
ob.data=model.arraylist1;
ob.id=model.arraylist2;
nextArrayCollection.addItem(ob);
//model.arraylist1 value is changed here
//model.arraylist2 value is changed here
ob=new Object();
ob.name=string1;
ob.data=model.arraylist1;
ob.id=model.arraylist2;
nextArrayCollection.addItem(ob);
Проблема заключается в том, что когда второй элемент добавляется в nextArrayCollection, значение первого элемента в arraycollection также изменяется на то же, что и второй добавленный элемент.
Я действительно смущен тем, что здесь происходит. Каждый раз, когда я добавляю новый элемент в коллекцию nextArrayCollection, все существующие значения элементов меняются на новые. Является ли коллекция массивов с использованием ссылки, а не значения. Как я могу преодолеть эту проблему?
1 ответ
Я считаю, что это просто недоразумение ООП и использование ссылок на объекты:
Даже если вы добавляете два новых объекта (ob = new object()), вы указываете оба на свойства своей модели, это НЕ копируется при назначении, а ТОЛЬКО на него ссылаются.
Простым тестом было бы просто клонировать коллекцию:
ob=new Object();
ob.name=string1;
ob.data= objectUtil.clone(model.arraylist1);
ob.id=model.arraylist2;
nextArrayCollection.addItem(ob);
это не идеальная парадигма / модель для вашей структуры данных, хотя, я думаю, что решением будет сортировка данных, а не установка данных для model.arraylist1 и model.arraylist2.