在Knockout中有很多关于编辑数据的博文和讨论。 我遇到的主要问题是,当用户取消编辑操作(或Ajax调用出错时)时,您需要一种简单的方法将数据恢复为先前的值。挖空:编辑数据并轻松回滚到之前的值
我不满意我找到了例子:我需要的东西很简单,甚至编辑非常复杂的模型时。
在Knockout中有很多关于编辑数据的博文和讨论。 我遇到的主要问题是,当用户取消编辑操作(或Ajax调用出错时)时,您需要一种简单的方法将数据恢复为先前的值。挖空:编辑数据并轻松回滚到之前的值
我不满意我找到了例子:我需要的东西很简单,甚至编辑非常复杂的模型时。
这是我找到了解决办法,我分享它,以便理解从别人更专业的可能的缺点比我,当然要帮。
当单击“编辑”按钮时,我创建了正在编辑的数据的副本。
编辑按钮(即:对表的每一行有一个foreach绑定)
<button data-bind="click: editItem">Edit</button>
从我的ViewModel:
this.selectedItem = ko.observable();
this.selectedItemCache = ko.observable();
this.editItem = function (item) {
self.selectedItem (item);
self.selectedItemCache (ko.mapping.toJS(item)); // ko.mapping.toJS "detach" my item from the view model
}
当用户点击“取消”按钮或当用于更新服务器的AJAX调用失败,我从“缓存”可观察到的数据复制到:
this.cancelEditItem = function() {
for (var prop in self.selectedItem) {
if (typeof self.selectedItem[prop] === 'function') {
self.selectedItem[prop](self.selectedItemCache()[prop]);
}
}
}
我同意Nicola的回答是最流行的方法。
我用这个http://www.knockmeout.net/2011/03/guard-your-model-accept-or-cancel-edits.html这是一个相当抛光的方式来做到这一点。它在我的应用程序中运行良好。
瑞恩·尼迈耶的“充分运用Knockout.js的”截屏包括一个很好的方式来做到这一点(与其他有用的技巧负载沿) - 我建议检查出来。
他谈到,在16:30左右恢复。