最简单的方法来判断一个对象自保存后是否已被修改?

时间:2009-12-11 23:48:23

标签: flex actionscript-3 air

我正在创建一个允许用户在文件中创建,编辑和保存对象的空中应用程序。如果用户在关闭之前没有将更改保存到对象,我正在尝试实现“保存关闭”提示。

假设我有一个名为MyBlass的类标记为Bindable,它由字段组成,每个字段都暴露一个getter和setter。其中一些字段是自定义类的ArrayCollections。我想考虑更改对任何字段的更改,或父对象组成的任何数组集合中任何对象中的任何字段。

我可以在MyClass对象上调用setter时手动调度一个事件并手动管理这个事件,但是我还必须在应用程序逻辑中的一堆地方执行它,例如当用户更改一个时包含它的一个数组集合中的自定义对象。这是一个很好的解决方案,但有点脏,难以维护。我还可以根据我在启动或上次保存时制作的副本来检查当前对象,但我不喜欢为此加倍内存占用的想法。

我希望有一些事件,也许是绑定广播的事件,我可以在一个地方收听并管理我的“已保存”变量。这样的事情存在吗?我试着监听绑定显然发送的dataChange事件,但我做错了,或者它没有做我认为应该做的事情。有更好的选择吗?

由于

2 个答案:

答案 0 :(得分:1)

我不知道this是否可能相关,但您可以随时查看

答案 1 :(得分:1)

为您保存的对象创建一个hash,然后将保存的哈希值与当前正在操作的对象的哈希值进行比较。如果它不同,则您的对象不同。

这当然需要一个具有足够低的冲突量的合适散列,但是你可以在网上找到许多哈希函数。

可以将“propertyChanged”事件用于可绑定属性,但它最好是脆弱的,因为它只适用于可绑定属性,而且只适用于那些没有指定其他绑定事件的可绑定属性。

此外,您只需要计算两次哈希值(在保存时和退出时进行比较),而使用事件的效率要低得多。