我有一个定义为ko.observableArray([])的值,并使用ko.mapping.fromJS将ajax中的数据附加到其中。但是,当我再次使用ko.mapping.fromJS时,从ajax调用中获取新数据会替换self.SampleArray而不是追加新数据。我想保留以前的数据。怎么可能呢?
function ViewModel() {
var self = this;
self.SampleArray = ko.observableArray([]);
$.ajax({
..
..
success: function() {
ko.mapping.fromJS(data, {}, self.sampleArray());
}
})
}
答案 0 :(得分:2)
尝试将其推入observableArray
而不是替换它
<强>视图模型:强>
function ViewModel() {
var self = this;
self.sampleArray = ko.observableArray([{
'Hours': 0.5
}])
setTimeout(function () {
alert('Mock of ajax call')
var newData = ko.mapping.fromJS(data1)();
self.sampleArray.push.apply(self.sampleArray,newData)
}, 2000);
}
ko.applyBindings(new ViewModel())
push.apply优于传统循环语句:
如果您的数组/集合有多个项目,并且您添加了 (array.push(item)一个接一个,然后通知订阅者 每次推送/添加操作。然后UI将具有该数字 刷新。这将损害UI页面的表现。
但是如果您使用 array.push.appy ,那么您仍然可以添加多个 项目,但订阅者只会收到一次通知。
这就是差异和优势/用法 array.push.apply函数。
示例工作小提琴 here
使用utils.forEach here
进行示例工作