我需要将ViewModel中的主源代码中的一些数据克隆到对话框中。原因是用户可以取消对话框,我不希望主人反映这些取消的更改。如何使用敲除映射克隆和重新绑定我的数据?
我在对话框中创建主数据的复制副本,并将数据绑定设置为拾取“本地编辑的*”特性。如果用户点击确定,那么我会尝试将数据保存到主数据库中(如果它已编辑),否则请将数据按其新数据进行推送。
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。
这个好,谢谢。为什么当所有的单个属性都是包装的'localEdited'本身必须是可观察的? – jaffa 2012-02-09 17:34:29
你可以不用localEdited就可以观察到,但在这种情况下,你需要手动更新editItem函数中localEdited的每个observable属性。所以你将不得不有这样的this.localEdited.property1(data.property1()); this.localEdited.property2(data.property2());等等 – 2012-02-09 17:38:45
好吧我现在明白了,当每个任务需要更新UI时,淘汰赛需要一些知道的方法。在这种情况下,可观察的分配是钩子。如果我明白,我知道它是一个很好的解释! – jaffa 2012-02-09 23:23:17