【发布时间】:2012-07-28 07:13:33
【问题描述】:
我在尝试使用映射插件将项目更新为 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.Updated(result.Updated);(其中 updated 是对象的属性之一),这可以按预期工作,但是我宁愿不要在每个属性上手动调用它,除非我必须这样做。
是否可以使用ko.mapping.fromJSON(result,item);(或一些变体)?我在做一些愚蠢的错误吗?
提前致谢。
【问题讨论】:
标签: knockout.js knockout-mapping-plugin