Ho riscontrato un problema con il binding "controllato" a eliminazione diretta. Sembra che l'evento "change" alla casella di controllo restituisca il vecchio valore, prima che venga aggiornato (quindi se è deselezionato restituirà false). Non penso di poterti iscrivere al valore poiché lo ho dentro l'oggetto.Evento di modifica della casella di controllo Knockout invia il vecchio valore
<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>
Quindi, in questo esempio ho ShowOpened casella di controllo che può innescare metodo CategoryChange che cambierà una variabile all'interno di oggetto (che ho bisogno in seguito per sapere quale oggetto vengono aggiornati). Ma quando viene cambiato il chechbox invia sempre il vecchio valore, il metodo di innesco, e quindi modifica il valore. C'è un modo per risolvere questo problema?
C'è qualcosa che non va nel tuo codice. Né 'ShowOpened' né' IsUpdated' sono ko.observables (e probabilmente questo è il motivo per cui ottieni sempre il vecchio valore). Come può funzionare anche questo codice? 'CategoryChange' dovrebbe generare un'eccezione. – freakish
@freakish sei wright, ho commesso un errore durante la creazione di questo post in origine. Ma l'errore che hai segnalato non è ancora il problema. – akhabaiev
Oi, manca ancora questo: 'this.ShowOpened = ko.observable (ShowOpened);' e questo: 'pCategory.ShowOpened()'. Devo dire che hai commesso molti errori durante la stesura di questo post ... – freakish