Knockout.js映射不更新

时间:2014-09-10 16:14:11

标签: knockout.js knockout-mapping-plugin knockout-mvc

我有一张记录表。每当我从服务器获取数据时,我想更新ViewModel中的某个字段。

JS:

$(document).ready(function () {

    var data = JSON.parse($("#model").val());
    var vm = new koViewModel(data);
    ko.applyBindings(vm);

    ....
    //ajax call -> update viewModel
    {
         vm.loadData(data);
    }

});

var koViewModel = function (data) {
    var self = this;
    self.items = ko.mapping.fromJS(data);
    };

    self.getRecord = function (id) {
        var match = ko.utils.arrayFirst(self.items(), function (item) {
            return item.Id() === id;
        });
        if (match) {
            return match;
        }
    };

    self.loadData = function (data) {
        $.each(data.ComponentBases, function (i, item) {
            ko.mapping.fromJS(item, {}, self.getRecord(item.Id));
        })
    };
};

HTML:

<tbody data-bind="foreach: items">
    <tr>
        <td data-bind="text: Name"></td>
        <td data-bind="text: VerifyResult.Message"></td>
    </tr>
</tbody>

每当我调用少于3条记录的loadData()函数时,它就会更新。但是,当我有3个或更多时,即使Id字段匹配,其中至少有一个也无法正确更新。

可能是什么原因?

0 个答案:

没有答案