从Flex

时间:2015-10-14 06:13:58

标签: actionscript-3 datagrid flash-builder flex4.5 advanceddatagrid

我正在使用Apache Flex 4.11 Web应用程序。我有一个DataGrid,它有项目渲染器来更改记录。现在我使用项呈示器更改Datagrid中的记录。现在,当我点击它时,DataGrid旁边有一个取消按钮,它应该删除本地更改(我已经完成了更改记录),并显示更改前显示的原始数据。

我该怎么做。

由于 Bikrant Singh

1 个答案:

答案 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()); 
}

注意:如果要创建某个复杂类/对象的向量,则可能需要注册这些类...再次从内存中进行调整,以便根据需要进行调整...