我有两个数据列表,并希望将它们合并到一个带有敲除映射的列表中。
如果我定义一个要比较的键,这似乎可以正常工作,除了它删除了最近更新中未列出的项目。
有没有办法使用 KO 映射到数组而不删除最新列表中未出现的项目?
下面的EG,应该产生:
- 1 AB
- 2 AA BB
- 3 AAA
- 4 血脑屏障
不是
- 1 AB
- 2 AA BB
- 4 血脑屏障
<ul data-bind='foreach: mergedList'>
<li>
<span data-bind='text: id'></span>
<span data-bind='text: a'></span>
<span data-bind='text: b'></span>
</li>
</ul>
var listA = [
{ id: 1, a: 'A'},
{ id: 2, a: 'AA'},
{ id: 3, a: 'AAA'}
];
var listB = [
{ id: 1, b: 'B'},
{ id: 2, b: 'BB'},
{ id: 4, b: 'BBB'}
];
var mapping = {
key: function(data) {
return ko.utils.unwrapObservable(data.id);
},
create: function (options){
var model = new subViewModel();
ko.mapping.fromJS(options.data, {}, model);
return model;
}
}
var subViewModel = function(){
var self = this;
self.a = ko.observable();
self.b = ko.observable();
}
var viewModel = function(){
var self = this;
self.mergedList = ko.observableArray();
}
var vm = new viewModel();
ko.mapping.fromJS(listA, mapping, vm.mergedList);
ko.mapping.fromJS(listB, mapping, vm.mergedList);
ko.applyBindings(vm);