0

我从一个运行良好的 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);
4

1 回答 1

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));

见小提琴

于 2013-07-11T14:47:50.863 回答