Tengo un problema con el enlace "comprobado" no deseable. Parece que el evento "cambiar" en la casilla de verificación devuelve un valor anterior, antes de que se actualice (por lo que si no se selecciona, devolverá falso). No creo que pueda suscribirme al valor ya que lo tengo dentro del objeto.Evento de cambio de casilla de verificación eliminada envía el valor anterior
<tbody data-bind="foreach: Categories">
<tr>
<td><input type="checkbox" data-bind="checked: ShowOpened, event: { change: $root.CategoryChange }" /></td>
</tr>
</tbody>
<script type="text/javascript">
var Category = function (Id, Name, Order, ShowOpened) {
this.Id = Id;
this.Name = Name;
this.Order = Order;
this.ShowOpened = ShowOpened;
this.IsUpdated = ko.observable(false);
this.OldOrder = Order;
this.OldShowOpened = ShowOpened;
};
var ViewModel = {
Categories: ko.observableArray([]),
CategoryChange: function(pCategory) {
if(pCategory.Order != pCategory.OldOrder || pCategory.ShowOpened != pCategory.OldShowOpened)
pCategory.IsUpdated(true);
else
pCategory.IsUpdated(false);
}
};
ko.applyBindings(ViewModel);
</script>
Así que en este ejemplo he ShowOpened casilla de verificación que puede desencadenar método CategoryChange que va a cambiar una variable dentro del objeto (que necesito más tarde para saber qué objeto se actualiza). Pero cuando se cambia el cuadro de chequeo, siempre envía el valor anterior, el método de activación, y luego cambia el valor. ¿Hay alguna forma de arreglar esto?
Algo está mal con su código. Ni 'ShowOpened' ni' IsUpdated' son ko.observables (y es por eso que siempre obtienes el valor anterior). ¿Cómo puede funcionar este código? 'CategoryChange' debería lanzar una excepción. – freakish
@freakish eres wright, cometí un error al crear esta publicación originalmente. Pero aún así el error que señaló no es el problema. – akhabaiev
Oi, todavía falta esto: 'this.ShowOpened = ko.observable (ShowOpened);' y esto: 'pCategory.ShowOpened()'. Debo decir que cometió muchos errores al escribir esta publicación ... – freakish