2011-06-18 2 views
1

J'ai un formulaire avec quatre champs de saisie. J'ai besoin de mettre à jour le res (3) quand on est mis à jour à partir de l'interface utilisateur. Ce qui signifie que celui qui est mis à jour pourrait être l'un des quatre.knockout s'abonner aux observables nécessaires?

myViewModel.four.subscribe(function(newValue) { 

//update one here 
//update two here 
//update three here 

}); 

et ainsi de suite .....

myViewModel.one.subscribe(function(newValue) { 


//update two here 
//update three here 
//update four here 

}); 

mais comment dois-je mettre à jour celles à l'intérieur de la méthode? Pour moi, cela ressemblerait à une situation Stack Overflow ...

+0

Les autres champs sont-ils mis à jour avec la même valeur? – Dan

Répondre

3

Dans Knockout 1.2.1, si une observable est mise à jour avec exactement la même valeur, les mises à jour ne seront pas envoyées. Donc, dans ce cas, vous devriez être d'accord, si chacune des valeurs est mise à jour avec la même valeur. Auparavant cependant, le meilleur moyen d'éviter une boucle récursive de mises à jour est de vérifier votre abonnement si l'observable a vraiment besoin d'être mis à jour. Cela permettra de réduire la chaîne de mises à jour.

Alors:

myViewModel.one.subscribe(function(newValue) { 

    if (two() !== "the right value") { 
     two("the right value"); 
    } 
    //etc... 
}); 

Sinon, s'il y a plus à votre scénario, il peut y avoir d'autres options avec inscriptibles dependentObservables qui pourraient être explorées. Cependant, lorsque vous obtenez plus d'une relation bidirectionnelle, les abonnements manuels sont généralement les meilleurs choix.

Questions connexes