0

以下のように、さまざまなモデル値を追加する配列コレクションがあります。

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);

問題は、2 番目のアイテムが nextArrayCollection に追加されると、arraycollection の最初のアイテムの値も、追加された 2 番目のアイテムと同じ値に変更されることです。

ここで何が起こっているのか、私は本当に混乱しています。新しいアイテムを nextArrayCollection に追加するたびに、既存のすべてのアイテムの値が、追加された新しいアイテムの値に変更されます。値ではなく参照を使用する配列コレクションです。どうすればこの問題を克服できますか?

4

1 に答える 1

1

これは単なる OOP の誤解であり、参照オブジェクトの使用だと思います。

2 つの新しいオブジェクト (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 に設定しないことだと思います。

于 2012-11-21T08:53:35.943 に答える