使用来自第二个源的数据扩展observableArray

时间:2013-07-11 14:32:34

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

我从Ajax源创建了一个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 个答案:

答案 0 :(得分: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