我尝试使用映射插件更新项目作为observableArray的一部分时出现问题。
我有以下代码
accounts.list = ko.mapping.fromJS(@(Html.Raw(Model.AccountsJSON)));
我已将此绑定到使用
的表格<tbody data-bind="foreach: list"> ... </tbody>
这一切都正常,然后我有以下功能
$('#datatable').delegate(".cancelLock", "click", function() {
var item = ko.contextFor(this).$data;
var param = {AccountNumber : item.AccountNumber()}
$.post('@Url.Action("cancellock","accounts")',param,function(result){
ko.mapping.fromJSON(result,item);
if(accounts.lockeditem() == item){
accounts.lockeditem(0);
}
});
});
行ko.mapping.fromJSON(result,item);
不会导致错误,函数会继续,但不会导致observable更新。
我已经尝试将代码更改为ko.mapping.fromJSON(result,accounts.list);
(并更新我的控制器以返回完整列表)并且这项工作正常 - 问题是我不想更新整个表格,我“只是” “想把'item'还原回原来的状态。
我也尝试使用item.Updated(result.Updated);
(其中更新是对象的属性之一)并按预期工作,但我不想在每个属性上手动调用它,除非我必须这样做。
是否可以使用ko.mapping.fromJSON(result,item);
(或某些变体)?我做了一些愚蠢的错事吗?
提前致谢。
答案 0 :(得分:4)
除非我误解了您的意图,否则您可以使用ko.mapping.fromJS
(或来自JSON)的变体来执行此操作,ko.mapping.fromJSON(result, {}, item);
在“指定更新目标”下提及。
所以我想你想要这个:
{{1}}
这是一个小提琴:mapping docs
答案 1 :(得分:0)
我更新了小提琴以引用rawgithub.com和最新的knockout.js文件..
https://rawgithub.com/SteveSanderson/knockout.mapping/master/build/output/knockout.mapping-latest.debug.js
http://knockoutjs.com/downloads/knockout-2.2.1.js
这篇文章也对我有所帮助 https://github.com/SteveSanderson/knockout.mapping/issues/41