2013-07-11 19 views
0

我从Ajax源创建一个observableArray,它工作得很好。现在我想用来自第二个源的数据扩展一些数组项。用来自第二个源的数据扩展observableArray

例如:

{ id: 1, name: 'Hugo', age: 18 } 

......后来我想补充:

{ id: 1, city: 'New York', country: 'US' } 

...这将导致:

{ id: 1, name: 'Hugo', age: 18, city: 'New York', country: 'US' } 

这可能与ko.mapping插件?我已经做了一些测试,结果是数组中项目的映射属性已被第二个来源的属性取代。


解决方案

嗯,这是实际上是非常容易解决。当使用地图插件添加新数据时,我只需要检查key。现有数据仅通过附加数据进行扩展。

ko.mapping.fromJS(modifications, { 
    key: function(data) { 
     return ko.unwrap(data.id); 
    } 
}, originalData); 

回答

1

如果属性不是可观察对象,则可以使用ko.utils.extend。

var original = { id: 1, name: 'Hugo', age: 18 }; 
var modifications ={ id: 1, city: 'New York', country: 'US' }; 


var result2 = ko.utils.extend(original, modifications); 

console.log(JSON.stringify(result2)); 

See fiddle

+0

但“LL上observableArray这项工作? –

相关问题