我有一张记录表。每当我从服务器获取数据时,我想更新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字段匹配,其中至少有一个也无法正确更新。
可能是什么原因?