Gostaria de usar uma propriedade no meu ViewModel para alternar qual ícone exibir sem criar uma propriedade computada separada do inverso. Isso é possível?
<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>
Meu ViewModel possui períodos de propriedade que são uma matriz de meses, assim:
var month = function() {
this.charted = ko.observable(false);
};
knockout.js
agradl
fonte
fonte
Respostas:
Ao usar um observável em uma expressão, você precisa acessá-lo como uma função como:
visible: !charted()
fonte
hidden
ligação na v3.5.0Concordo com o comentário de John Papa de que deveria haver uma
hidden
ligação embutida . Há dois benefícios em umahidden
ligação dedicada :hidden: charted
em vez devisible: !charted()
.charted
diretamente, em vez de criar umcomputed
para observar!charted()
.É simples o suficiente para criar uma
hidden
ligação, porém, assim:Você pode usá-lo exatamente como a
visible
ligação interna:fonte
return !ko.utils.unwrapObservable(valueAccessor());
hidden
ligação por seu comentário. (BTW, eu estava usando CoffeeScript no meu projeto no momento que eu postei isso originalmente sintaxe do CoffeeScript não o torna óbvio quando um retorno é intencional..)É um pouco confuso, como você tem que fazer
então eu fiz
meu modelo é
Check-in violino http://jsfiddle.net/khanSharp/bgdbm/
fonte
Você pode usar minha ligação switch / case , que inclui
case.visible
ecasenot.visible
.Você também pode tê-lo como
fonte
Para tornar a ligação ciente das alterações na propriedade, copiei o manipulador de ligação visível e o invertei:
fonte
Isenção de responsabilidade: esta solução é apenas para fins de entretenimento.
fonte
Eu estava tendo o mesmo problema sobre como usar o oposto de um observável booleano. Eu encontrei uma solução fácil:
Agora no seu HTML você deve fazer isso
Quando o programa é iniciado, apenas "Text1" fica visível porque "false === false is TRUE" e Text2 não está visível.
Digamos que temos um botão que chama o evento gatherPlacesData on click. Agora o Texto1 não estará visível porque "true === false é FALSE" e o Texto 2 estará visível apenas.
Outra solução possível poderia estar usando o computador observável, mas acho que é uma solução complicada demais para um problema tão simples.
fonte
Também pode usar oculto assim:
fonte