情况很简单。我有一个数据网格,可以从Web服务获取数据。
当从webservice恢复数据时,它会调用以下函数:
private function onListReg():void
{
arrRegOld = WSAutoreg.list.lastResult as ArrayCollection;
arrReg = WSAutoreg.list.lastResult as ArrayCollection;
dgReg.dataProvider = autoreglist;
}
dgReg是Datagrid。 arr变量是像这样定义的ArrayCollections:
private var arrRegOld:ArrayCollection = new ArrayCollection;
[Bindable]
private var arrReg:ArrayCollection = new ArrayCollection;
意图是当我点击更新按钮时,它会将arrRegOld与arrReg进行比较,并查看是否有任何值发生了变化。问题是每当我更改Datagrid上的值时,它都会在dataProvider和两个ArrayCollections上发生更改。
有谁知道为什么会这样?我应该怎么做才能使绑定仅适用于一个ArrayCollection?
感谢任何提示。 - 迈克
答案 0 :(得分:1)
您的列表共享相同的对象,如果您从arrReg修改第一个元素,您将在arrRegOld中看到修改 - 它与绑定无关。您需要克隆对象。你有几个选择:
a)为对象实现克隆方法(推荐) b)使用像这样的通用方法:
private function clone(source:Object):*
{
var array:ByteArray=new ByteArray();
array.writeObject(source);
array.position=0;
return(array.readObject());
}
并调用arrRegOld = clone(arrReg);在arrReg = WSAutoreg.list.lastResult as ArrayCollection;
之后