flex中的ArrayCollection问题

时间:2012-11-21 06:45:40

标签: flex model arraycollection

我有一个数组集合,我可以在其中添加不同的模型值,如下所示。

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时,所有现有项目值都会更改为添加的新项目值。 arraycollection是使用refrence而不是值。我怎样才能克服这个问题?

1 个答案:

答案 0 :(得分:1)

我认为这只是对OOP的误解,而是使用引用对象:

即使您添加了两个新对象(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。