2013-06-18 3 views
0

J'ai un observableArray calculé lié directement à un bouton radio et un événement lié à cette sélection de bouton radio. La sélection du bouton radio ajoute de la valeur au tableau, ainsi que l'événement déclencheurs de sélection où j'utilise la valeur du tableau. Le problème auquel je suis confronté est que la matrice est mise à jour (via la logique calculée) après l'exécution de la fonction d'événement mais je dois vérifier le contenu de la matrice (principalement la longueur) dans la fonction événementielle elle-même. Si j'utilise la fonction telle qu'elle est maintenant, je reçois l'ancienne valeur. Existe-t-il un moyen de forcer le tableau à mettre à jour les valeurs (évaluer la valeur calculée) avant de pouvoir l'utiliser dans la fonction d'événement?Knockout - comment mettre à jour un observableArray calculé avant d'utiliser sa valeur dans une fonction

<input type="radio" data-bind="attr: {name: name}, checked: val, event :{ change: $parent.Changed }" value="No" /> 

// Knockout code 
this.Items = ko.computed(function() { 
    //Add selected items to ItemsArray 
} 
this.Changed = function() { 
    if (self.Items().length > 2) { 
     //Do sth 
    } 
} 
+1

S'il vous plaît un peu de code (peut-être un repro en jsFiddle), sans voir votre code, il est très difficile de dire ce que vous essayez réaliser/demander ici. – nemesv

+0

Voir la duplication possible - vous pouvez appeler 'myObservable.valueHasMutated()' pour informer les abonnés qu'ils doivent être mis à jour. –

+0

@JacobKrall Je n'ai pas valueHasMutated pour observableArrays. Pouvez-vous me montrer la bonne direction? – aaa

Répondre

1

Au lieu d'avoir un à l'observable événement observable et le changement calculé de liaison vous pouvez vous abonner qui est lié à la propriété checked. Dans la fonction abonné vous pouvez calculer tableau Items au début, puis faites votre chèque de longueur:

this.val.subscribe(function (newVal) { 
    // update Items array 
    ... 

    // 
    if (self.Items().length > 2) { 
     ... 
    } 
}); 
Questions connexes