Est-il possible de données-liaison visible à la négation (“!”) d'un booléen ViewModel de la propriété?
Je voudrais utiliser une propriété sur mon ViewModel pour basculer l'icône à afficher sans créer un autre calculée de la propriété de l'inverse. Est-ce possible?
<tbody data-bind="foreach: periods">
<tr>
<td>
<i class="icon-search" data-bind="visible: !charted, click: $parent.pie_it"></i>
<i class="icon-remove" data-bind="visible: charted, click: $parent.pie_it"></i>
</td>
</tr>
</tbody>
Mon ViewModel a une propriété périodes qui est un tableau de mois, comme ceci:
var month = function() {
this.charted = ko.observable(false);
};
- Ce n'est pas vraiment une double question. L'OP de la question que vous consultez le savait déjà il est possible de données lié à la négation d'un fait observable, mais se demande pourquoi elle doit être appelée comme une fonction. Cette question de l'OP ici ne savais pas comment le faire, en premier lieu, et, évidemment, n'a pas trouvé d'autres question. Je suis heureux que j'ai trouvé à cette question - qui est surtout grâce à son titre descriptif.
Vous devez vous connecter pour publier un commentaire.
Lors de l'utilisation d'un observable en une expression que vous avez besoin d'y accéder dans une fonction comme:
visible: !charted()
hidden
de liaison de v3.5.0Je suis d'accord avec Jean-Papa du commentaire qu'il devrait être intégré dans
hidden
de liaison. Il y a deux avantages à lahidden
de liaison:hidden: charted
au lieu devisible: !charted()
.charted
directement, plutôt que de créer uncomputed
d'observer!charted()
.Il est assez simple de créer un
hidden
de liaison, même si, comme ceci:Vous pouvez l'utiliser comme le haut-
visible
de liaison:return !ko.utils.unwrapObservable(valueAccessor());
hidden
de liaison par votre commentaire. (BTW, j'ai été en utilisant CoffeeScript dans mon projet, au moment où j'ai posté cette origine. CoffeeScript est la syntaxe n'est pas évident lorsque le retour est volontaire.)C'est peu déroutant, comme vous l'avez fait
donc, je n'ai
mon modèle est
vérifiez dans le violon http://jsfiddle.net/khanSharp/bgdbm/
Vous pouvez utiliser mon interrupteur/cas de liaison, qui comprend
case.visible
etcasenot.visible
.Vous pourriez également avoir comme
Afin de faire la liaison au courant des changements dans la propriété, j'ai copié le visible de liaison gestionnaire et inversé c':
Avertissement: cette solution est pour fins de divertissement seulement.
J'ai eu le même problème sur la façon d'utiliser l'un en face de l'un booléen observables. J'ai trouvé une solution facile:
Maintenant sur votre code HTML ce faire, vous devez
Lorsque le programme démarre seulement "Texte1" est visible à cause de "faux===false TRUE" et Texte2 n'est pas visible.
Permet de dire que nous avons un bouton qui appelle la gatherPlacesData sur l'événement click. Maintenant Texte1 ne sera pas visible, car le "vrai === faux est FAUX" et le Texte 2 ne sera visible.
Une autre solution possible pourrait être calculée à l'aide de observables, mais, je pense que c'est une trop compliqué solution pour un problème simple.
Pouvez également utiliser la caché comme ceci: