Невозможно обновить пользовательский интерфейс Knockout с помощью нового объекта данных

В настоящее время у меня возникают проблемы с обновлением пользовательского интерфейса, когда я получаю с сервера новые данные для одного элемента, который находится в 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...
} 
6
задан AlfeG 10 February 2012 в 14:07
поделиться