Я хотел бы использовать свойство в моей ViewModel, чтобы переключать отображаемый значок, не создавая отдельное вычисляемое свойство инверсии. Это возможно?
<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>
Моя ViewModel имеет свойство period, которое представляет собой массив месяцев, например:
var month = function() {
this.charted = ko.observable(false);
};
knockout.js
agradl
источник
источник
Ответы:
При использовании наблюдаемого в выражении вам нужно обращаться к нему как к функции, например:
visible: !charted()
источник
hidden
привязку в v3.5.0Я согласен с комментарием Джона Папы о том, что должна быть встроенная
hidden
привязка. Существует два преимущества выделеннойhidden
привязки:hidden: charted
вместоvisible: !charted()
.charted
напрямую, а не создаватьcomputed
для наблюдения!charted()
.Однако создать
hidden
привязку достаточно просто , например так:Вы можете использовать его так же, как встроенную
visible
привязку:источник
return !ko.utils.unwrapObservable(valueAccessor());
hidden
привязку в соответствии с вашим комментарием. (Кстати, я использовал CoffeeScript в своем проекте в то время, когда я публиковал это изначально. Синтаксис CoffeeScript не делает очевидным, когда возврат является преднамеренным.)Это немного сбивает с толку, как вы должны сделать
так я и сделал
моя модель
Проверьте в скрипке http://jsfiddle.net/khanSharp/bgdbm/
источник
Вы можете использовать мою привязку switch / case , которая включает
case.visible
иcasenot.visible
.Вы также можете иметь это как
источник
Чтобы привязка знала об изменениях в свойстве, я скопировал видимый обработчик привязки и перевернул его:
источник
Отказ от ответственности: это решение только для развлекательных целей.
источник
У меня возникла та же проблема о том, как использовать противоположность логической наблюдаемой. Я нашел простое решение:
Теперь на вашем HTML вы должны сделать это
При запуске программы отображается только «Text1», поскольку «false === false is TRUE», а Text2 не отображается.
Допустим, у нас есть кнопка, которая вызывает collectPlacesData при событии click. Теперь Text1 не будет виден, потому что «true === false is FALSE», а текст 2 будет виден только.
Другим возможным решением может быть использование вычисляемых наблюдаемых, но, я думаю, это слишком сложное решение для такой простой задачи.
источник
Также можно использовать скрытый, как это:
источник