不需要的绑定

时间:2010-04-15 15:06:43

标签: flex actionscript-3 flex3

情况很简单。我有一个数据网格,可以从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?

感谢任何提示。   - 迈克

1 个答案:

答案 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;

之后