2012-01-14 14 views
8

Estoy usando el control de flujo sin contenedor en ko 2.0. Cuando actualizo un elemento en mi observableArray, no actualizo la interfaz de usuario. Estoy actualizando la matriz de esta manera:Actualizando un array observable no actualiza UI

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

Pienso que no actualiza debido a la actualización de la matriz por el índice no pone nada en ko. De mirar the documentation parece que no hay métodos para actualizar un objeto que a su vez actualizará la interfaz de usuario. ¿O está ahí?

+0

Un poco difícil ayudar sin ver su modelo de vista, y la comprensión de lo que está tratando de hacer. Como punto de partida, ¿ha visto esta pregunta http://stackoverflow.com/questions/8774943/knockoutjs-observablearray-to-update-when-inner-observable-is-changed y esto http://stackoverflow.com/questions/6425409/how-to-replace-a-given-index-element-in-knockoutjs? – saurus

Respuesta

15

Aquí hay un violín que muestra cómo reemplazar un elemento en un array observable y hacer que sus cambios notifiquen a la interfaz de usuario.

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

La clave aquí es la función de reemplazar en el observableArray. También podría usar empalme.

... Observe el uso de "reemplazar" a continuación ...

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

alguien debería agregar ese método de reemplazo a la documentación. funcionó muy bien, gracias! –

+1

buen punto. Lo he agregado a mi curso Knockout porque me preguntan mucho sobre eso. –

Cuestiones relacionadas