Question

Je voudrais lier une propriété visible pour être vrai lorsque l'une des deux conditions sont vraies. Quelque chose comme ce qui suit

 <tr data-bind="visible: active || $parent.displayDeactive">....</tr>

Mon code fonctionne quand je fais un ou l'autre des liaisons, mais pas quand je mets le || là-bas. Je ne l'ai pas trouvé aucune documentation qui dit que je peux mettre toute logique dans cette liaison, mais si je ne peux pas le faire directement ce qui est le chemin de l'Est de le faire depuis que je suis une propriété de se lier un modèle et un objet de $ viewmodel parent.

Était-ce utile?

La solution

Si vous utilisez la valeur d'une observable dans une expression alors vous devez les référencer en fonction. Donc, si active et displayDeactive sont observables vous faites:

data-bind="visible: active() || $parent.displayDeactive()"

Il y a quelques façons de le déplacer au modèle de vue, vous pouvez:

  • créer une observable calculée sur l'enfant (fonction devrait être en mesure de référencer le parent)
  • créer une fonction sur le parent qui prend chez l'enfant et retourne votre valeur (liaisons sont exécutées dans un Computed observable, il se déclenche à nouveau lorsque l'une observable qu'il accède à des changements)
  • créer une fonction sur l'enfant qui prend la mère et retourne la valeur (même note que ci-dessus)

Exemple de logique dans la liaison et en utilisant une fonction sur le parent ici: http://jsfiddle.net/rniemeyer/f6ZgH/

Autres conseils

Ajoutez les parens après les observables, puisque vous les évaluer.

<input type="checkbox" data-bind="checked:displayDeactive"> Display deactive</input>
<br/><br/>
<table>
    <tbody data-bind="foreach: products">
        <tr data-bind="visible: active() || $parent.displayDeactive()">
            <td><span data-bind="text:name"></span></td>
        </tr>
    </tbody>
</table>

Vous trouverez ici le code complet: http://jsfiddle.net/johnpapa/gsnUs/

Vous pouvez utiliser une propriété calculée sur l'élément qui permet d'évaluer l'templated expression (vu juste le @RPNiemeyer a répondu avec cela aussi ... I + +1).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top