В настоящее время у меня возникают проблемы с обновлением пользовательского интерфейса, когда я получаю с сервера новые данные для одного элемента, который находится в observableArray объектов оболочки, который содержит объект из нескольких наблюдаемых.
Примите во внимание следующее:
var vm = {
....
localEdited: ko.mapping.fromJS(new ItemWrapper(defaultModelSerialised)),
selected: ko.observable(null),
editItem: function(data) {
// clone a temporary copy of data for the dialog when opening (*.localEdited on dialog)
var clonedData = ko.toJS(data);
ko.mapping.fromJS(clonedData, null, this.localEdited);
// selected should now point to the item in the obserable array which will be refreshed
this.selected(data);
// open dialog...
},
submitDialog: function(data) {
// submit data to server...
// (1) commit the data back to UI (new item is return in resp.entity from server)
vm.selected(new ItemWrapper(resp.entity));
// at this point the UI isn't showing the updated value
// (2) however if I do this it reflects the data change in the UI
this.selected().Name("changed"); // updates the UI.
}
Кто-нибудь может объяснить, почему передача ItemWrapper в vm.selected не обновляет пользовательский интерфейс, тогда как в (2) это работает. Я не хочу настраивать каждое свойство, как в (2), для каждого свойства.
ItemWrapper выглядит так:
function PoolWrapper(pool) {
this.Name = ko.observable(pool.Name);
// more properties...
}