Knockout.js 从一个模型更新另一个模型

Knockout.js 从一个模型更新另一个模型,knockout.js,Knockout.js,我有两个相同类型的模型,模型A和模型B。我想用模型B的属性更新模型A。两个模型都绑定到UI的不同区域 有没有一种不必逐个属性进行更新的方法 // address = model A // this.editingBillingAddress() = model B var address = ko.utils.arrayFirst(this.userAddresses(), function (address) { return address.addressId() == 123;

我有两个相同类型的模型,模型A和模型B。我想用模型B的属性更新模型A。两个模型都绑定到UI的不同区域

有没有一种不必逐个属性进行更新的方法

// address = model A
// this.editingBillingAddress() = model B

var address = ko.utils.arrayFirst(this.userAddresses(), function (address) {
    return address.addressId() == 123;
});

//address = this.editingBillingAddress(); // this does nothing. nothing in the UI updates

// this works but I must explicitly set every property
address.name(this.editingBillingAddress().name());
address.address1(this.editingBillingAddress().address1());
address.address2(this.editingBillingAddress().address2());
// .... and so on until the fingers bleed

您可以使用映射插件首先转换为javascript对象,然后映射到具有可观察对象的对象:


在这个问题的第二条评论中找到了答案:

您只需使用address,而不是self.address()。
var jsAddress = ko.mapping.toJS(self.address());
var address = ko.mapping.fromJS(jsAddress);
self.editingBillingAddress(address);
var address = ko.utils.arrayFirst(this.userAddresses(), function (address) {
    return address.addressId() == 123;
});

this.userAddresses.replace(address, this.editingBillingAddress());