【问题标题】:knock out mapping plugin updating singe item in array淘汰映射插件更新数组中的单个项目
【发布时间】: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


    【解决方案1】:

    除非我误解了您的意图,否则您可以使用 mapping docs 中“指定更新目标”下提到的 ko.mapping.fromJS(或 fromJSON)的变体来执行此操作。 所以我想你想要这个:

    ko.mapping.fromJSON(result, {}, item); 
    

    这是一个小提琴:http://jsfiddle.net/kR4jc/

    【讨论】:

    • 谢谢 - 信不信由你我之前真的尝试过 - 似乎我可能遇到了影响它的问题
    【解决方案2】:

    我更新了小提琴以引用 rawgithub.com 和最新的 knockout.js 文件..

    http://jsfiddle.net/kR4jc/5/

    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

    【讨论】:

      猜你喜欢
      • 2014-06-07
      • 2013-07-16
      • 2012-08-01
      • 1970-01-01
      • 2013-10-14
      • 1970-01-01
      • 2013-09-30
      • 2017-08-11
      • 2016-03-13
      相关资源
      最近更新 更多