Attualmente sto avendo problemi con l'aggiornamento dell'interfaccia utente quando ricevo nuovi dati dal server per un singolo oggetto che si trova in un array osservabile di oggetti wrapper che contiene un oggetto di più osservabili .Impossibile aggiornare l'interfaccia utente Knockout con l'oggetto dati nuovo
Si consideri il seguente:
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.
}
qualcuno può spiegare perché passando l'ItemWrapper in vm.selected non aggiorna l'interfaccia utente, mentre in (2) funziona. Non voglio dover impostare ogni proprietà come in (2) per ogni proprietà.
ItemWrapper assomiglia così:
function PoolWrapper(pool) {
this.Name = ko.observable(pool.Name);
// more properties...
}
È possibile associare qualcosa a vm.selected in html? In caso contrario, perché ti aspetti che Koutout aggiorni l'interfaccia utente in questa riga vm.selected (new ItemWrapper (resp.entity)); ? –
Forse potresti ottenere qualcosa in jsFiddle per dimostrarlo? Sarebbe più facile vedere parte del tuo codice. Suppongo che forse stai facendo 'with: selected' nella tua interfaccia utente o usando un template contro' selected'? –
@RomanBataev: Nulla è associato direttamente a vm.selected. In editItem() i dati trasmessi provengono da ItemWrapper nel observableArray. La variabile selezionata punta quindi all'elemento nell'array. Come il punto (2) dimostra che è legato all'interfaccia utente ok quando si passano le proprietà individualmente, ma non quando si passa ItemWrapper nella variabile selected(). – jaffa