我需要将 ViewModel 中的主源中的一些数据克隆到对话框中。原因是用户可以取消对话,我不希望主人反映那些取消的更改。
我在对话框中创建了主数据的克隆副本,并且数据绑定设置为获取“localEdited.*”属性。如果用户单击确定,我会尝试将数据保存回主服务器(如果已编辑),否则推送数据(如果是新数据)。
editItem: function(data) {
// clone a temporary copy for the dialog
this.localEdited = ko.mapping.fromJS(ko.toJS(data));
$("#dlgAdd").dialog("open");
},
以上目前有效,但是如果我单击主文件中的另一个项目,对话框不会显示更新的值。就好像 ko.mapping.fromJS 只工作一次,然后再也不会。它总是选择第一个值。我该如何解决这个问题?我觉得我需要重新绑定这些值,但 KO 的全部意义在于不必这样做。
我如何也将数据保留回父级。我想我可能有和上面一样的问题。
顺便说一句,我正在使用 KnockoutJS 1.2.1。