2014-10-07 2 views
0

У меня две модели того же типа, модель A и модель B. Я хочу обновить модель A со свойствами модели B. Обе модели связаны с различными областями пользовательского интерфейса.обновление одной модели от другой

Есть ли способ сделать обновление без необходимости переходить по собственности?

// 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 

ответ

1

Вы можете использовать отображение плагин для первого преобразования в объект яваскрипта, а затем сопоставить объект с наблюдаемыми: http://knockoutjs.com/documentation/plugins-mapping.html

var jsAddress = ko.mapping.toJS(self.address()); 
var address = ko.mapping.fromJS(jsAddress); 
self.editingBillingAddress(address); 

http://jsfiddle.net/Wk7dr/6/

+0

не работает в этом контексте. адрес не является наблюдаемым. – TugboatCaptain

+0

Вместо self.address() вы просто используете адрес. –

Смежные вопросы