2012-12-18 39 views
3

在Knockout中有很多关于编辑数据的博文和讨论。 我遇到的主要问题是,当用户取消编辑操作(或Ajax调用出错时)时,您需要一种简单的方法将数据恢复为先前的值。挖空:编辑数据并轻松回滚到之前的值

我不满意我找到了例子:我需要的东西很简单,甚至编辑非常复杂的模型时。

回答

2

这是我找到了解决办法,我分享它,以便理解从别人更专业的可能的缺点比我,当然要帮。

当单击“编辑”按钮时,我创建了正在编辑的数据的副本。

编辑按钮(即:对表的每一行有一个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]); 
     } 
    } 
} 
1

瑞恩·尼迈耶的“充分运用Knockout.js的”截屏包括一个很好的方式来做到这一点(与其他有用的技巧负载沿) - 我建议检查出来。

http://vimeo.com/51103092

他谈到,在16:30左右恢复。