Knock-out case événement de changement envoie l'ancienne valeur

Je vais avoir un problème avec knock-out "checked" de liaison. Il semble que l'événement "change" à la case de retour de l'ancienne valeur, avant qu'il soit mis à jour(si elle a été désactivée, elle renvoie false). Je ne pense pas que je peux vous abonner à la valeur puisque je l'ai à l'intérieur de l'objet.

<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>

Donc dans cet exemple j'ai ShowOpened case qui peuvent déclencher CategoryChange méthode qui va changer une variable à l'intérieur de l'objet(que j'ai besoin plus tard pour savoir quels objets sont mis à jour). Mais quand le chechbox est changé, toujours envoyer l'ancienne valeur, méthode de déclenchement, puis les changements de la valeur. Est-il possible de résoudre ce problème?

  • Quelque chose ne va pas avec votre code. Ni ShowOpened ni IsUpdated sont ko.observables (et probablement c'est pourquoi vous obtenez toujours l'ancienne valeur). Comment ce code fonctionne même? CategoryChange doit lever une exception.
  • vous êtes wright, j'ai fait une erreur lors de la création de ce post à l'origine. Mais toujours l'erreur vous avez indiqué n'est pas le problème.
  • Oi, manquant encore ceci: this.ShowOpened = ko.observable(ShowOpened); et ce: pCategory.ShowOpened(). Je dois dire que vous avez fait beaucoup d'erreurs lors de l'écriture de ce post...
InformationsquelleAutor akhabaiev | 2012-07-02