我目前正在使用演示模型模式构建 Flex/PHP 项目的客户端。
我想要实现的目标:
我目前有一个视图显示有关名为 Node.js 的域对象的不可编辑信息。根据节点是否可编辑以及用户是否具有正确的权限,可以在其中更改此对象的附加视图可用。一旦用户决定“保存更改”,所做的任何更改才会提交给服务器。如果对 NodeA 进行了更改并且用户导航到不同的 NodeB 而不保存它们,则 NodeA 将恢复到其原始状态。
设计:
我有一个信息视图的 PM,其中包含对当前节点的引用。编辑视图的 PM 是从这个 info PM 扩展而来的,添加了对包装的 Node 对象进行更改的方法。两个 PM 都注入了相同的节点引用,并且 info/edit 视图中的所有字段都通过它们的 PM 绑定到节点。
问题:
当用户对 NodeA 进行更改但没有提交时,我似乎想不出一个优雅的解决方案来恢复到原始状态。基本上,到目前为止我想到的是在编辑 PM 上保存单独的值副本,或者克隆创建一个新的节点引用,或者通过一组相同的节点属性。在这两个中,前者似乎是更好的主意,因为 Node 已经包含域逻辑,但我想知道创建唯一域对象的克隆是否是一种不好的做法,即使它在有限的范围内使用。