我正在使用backbone.js构建数据输入密集型RIA。我的第一个计划是在我的UI上设置“保存”和“取消”按钮,并且只有在用户点击保存时才将我的模型保存在大块中。点击取消只会从服务器重新加载模型。这样,用户无需担心犯下不可逆转的错误。
然而,我现在意识到实现撤销/重做可能不会那么困难,因为在模型值的变化中“观察”模型的变化并且在恢复模型值时视图正确地更新。如果我有撤消/重做,我会选择让我的模型立即保存到服务器。
骨干是否支持两种方法之一?使用主干的MVC实现undo / redo的好方法是什么?
答案 0 :(得分:5)
你已经等了一会儿这个答案,也许你已经回答了。我没有代码,但是有几个概念让我头疼。
从高层次来看,我会有一个可撤销的基础模型 - 或者你可以使用某种形式的mixin来为模型提供可撤销的能力。撤消的实现将使用命令模式来形成多级撤消'堆栈'。
如果我实现这个,我想我可能会为一个可撤销模型配备一个backbone.js命令模型集合。这些命令模型会将更改封装到可撤销模型中,并与模型中的更改事件一起创建。要撤消对可撤销模型的更改,您可以弹出top命令并将其撤消应用于可撤销模型。服务器刷新将擦除命令集合。
所有这一切的一个复杂因素是如何管理由于撤消而发生的更改 - 这些更改本身不应生成到堆栈顶部的撤消命令。
希望这有帮助。