2012-11-21 43 views
0

我有一個數組集合,其中添加了如下的不同模型值。flex中的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而不是值。我怎樣才能克服這個問題?

+0

它不是由於ArrayCollection的,但由於同refrence的,對於第2項使用「OB2」 – Imran

+0

我試過太多,但沒有NT工作 – Chinta

+0

它沒有工作,因爲這兩個@Imran評論和MonkeyMagiic回答指出,1兩的你的問題。 1)你需要不同的對象,即var ob:Object = new Object()和var ob2:Object = new Object()。在第二個添加中設置ob = blah只會更新原始(及其引用)。 2)您將值(數據,名稱,ID)指向SAME模型屬性...因此所有對象(即使您使用ob1,ob2等)都指向相同的數據。因此,如果模型更改,則對模型的所有引用都會更新。 –

回答

1

我相信這僅僅是一個面向對象的誤解,它的使用引用對象:

即使增加了兩個新的對象(OB =新的對象()),你點都在你的模型的屬性,這是不是在分配但僅引用時複製。

一個簡單的測試是簡單地克隆集合:

ob=new Object(); 
ob.name=string1; 
ob.data= objectUtil.clone(model.arraylist1); 
ob.id=model.arraylist2; 
nextArrayCollection.addItem(ob); 

這不是你的數據結構的理想模式/模式雖然,我認爲該決議將是該數據並沒有排序將數據設置爲model.arraylist1和model.arraylist2。

相關問題