2012-01-14 8 views
8

Sto utilizzando il controllo di flusso senza contenitore in ko 2.0. Quando aggiorno un oggetto nel mio osservableArray non si aggiorna l'interfaccia utente. Sto aggiornando la matrice in questo modo:L'aggiornamento di un osservableArray non aggiorna l'interfaccia utente

this.editFormHost = function (formHost) { 
    ... 
    formHost.HostName = newHostName; 
    this.formHosts[index] = formHost; 
} 

Sto pensando che non aggiorna perché aggiorna la matrice in base all'indice non chiama nulla in ko. Dall'esame di the documentation sembra che non ci siano metodi per aggiornare un oggetto che aggiornerà a sua volta l'interfaccia utente. O c'è?

+0

Un po 'difficile per aiutare senza vedere il tuo ViewModel, e capire ciò che si sta cercando di fare. Come punto di partenza, hai visto questa domanda http://stackoverflow.com/questions/8774943/knockoutjs-observablearray-to-update-when-inner-observable-is-changed e questo http://stackoverflow.com/questions/6425409/how-to-replace-a-date-index-element-in-knockoutjs? – saurus

risposta

15

Ecco un esempio che illustra come sostituire un elemento in un ObservableArray e che le sue modifiche notificano all'interfaccia utente.

http://jsfiddle.net/johnpapa/ckMJE/

La chiave qui è la funzione di sostituire l'observableArray. Puoi anche usare la giuntura.

... Si noti l'uso di "sostituire" qui sotto ...

var ViewModel = function() { 
    this.self = this; 
    self.index = ko.observable(0); // default 
    self.newColor = ko.observable("purple"); // default 
    self.colors = ko.observableArray([{ 
     color: 'red'}, 
    { 
     color: 'blue'}, 
    { 
     color: 'yellow'}]); 
    self.replaceIt = function() { 
     self.colors.replace(self.colors()[self.index()], { 
      color: self.newColor() 
     }); 
    }; 
}; 
ko.applyBindings(new ViewModel()); 
+5

qualcuno dovrebbe aggiungere quel metodo di sostituzione alla documentazione. ha funzionato alla grande, grazie! –

+1

buon punto. l'ho aggiunto al mio corso Knockout perché mi viene chiesto molto. –

Problemi correlati