O evento de mudança da caixa de seleção de knockout envia um valor antigo
Estou tendo um problema com a ligação "marcada". Parece que o evento "change" na caixa de seleção retorna o valor antigo, antes de ser atualizado (portanto, se ele estiver desmarcado, ele retornará false). Eu não acho que posso subscrever o valor desde que eu tenha dentro do objeto.
<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>
Portanto, neste exemplo, eu tenho a caixa de seleção ShowOpened que pode acionar o método CategoryChange que irá alterar uma variável dentro do objeto (que eu preciso saber mais tarde que objeto é atualizado). Mas quando o chechbox é alterado, ele sempre envia o valor antigo, o método de acionamento e, em seguida, altera o valor. Existe alguma maneira de corrigir isso?