我正在使用Apache Flex 4.11 Web应用程序。我有一个DataGrid,它有项目渲染器来更改记录。现在我使用项呈示器更改Datagrid中的记录。现在,当我点击它时,DataGrid旁边有一个取消按钮,它应该删除本地更改(我已经完成了更改记录),并显示更改前显示的原始数据。
我该怎么做。
由于 Bikrant Singh
答案 0 :(得分:0)
1st)复制/备份dataProvider的数据,而不是参考副本,但是真正的深层副本,在允许用户开始编辑之前执行此操作。
如果您使用的是ArrayCollection,则可以使用基于Flex的ObjectUtil:
dataGridDataBackup = ObjectUtil.copy(myDataProvidersData) as ArrayCollection;
VectorCollection没有克隆/副本(需要验证这个...),但您可以轻松地对其进行子类化并添加基于AMF(通过byteArray)的深拷贝,5 / 6s代码行该...
2nd)在“取消”按钮上单击“eventHandler:
”myDataProvidersData.disableAutoUpdate();
myDataProvidersData.removeAll();
myDataProvidersData.addAll(ObjectUtil.copy(dataGridDataBackup) as ArrayCollection);
myDataProvidersData.enableAutoUpdate();
注意:这是来自内存,因为我在这台机器上没有AS3 / Flex,但应该非常接近......
<强>更新强>
浅拷贝矢量:
var myNewVector:Vector.<yourvectortype> = orginalVector.concat();
深层复制(只需将其更改为向量而不是动态对象以提高性能):
function deepCopy(source:Object):* {
var _ba:ByteArray = new ByteArray();
_ba.writeObject(source);
_ba.position = 0;
return(_ba.readObject());
}
注意:如果要创建某个复杂类/对象的向量,则可能需要注册这些类...再次从内存中进行调整,以便根据需要进行调整...