2013-03-09 3 views
31

Возможно ли использовать Knockout's if binding более чем на одном булевом?Knockout.js «если привязка» по нескольким логическим точкам

Такие, как

<div data-bind="if: (property.aTrueValue && property.anotherTrueValue)">... 

Я пробовал много другой синтаксис, но не могу найти правильный синтаксис. Я не уверен, что это возможно.

ответ

44

Когда нокаут обрабатывает ваши привязки, он сначала оценивает ваше выражение.

Если выражение приводит к наблюдаемому, оно затем оценивает наблюдаемое как удобство для получения окончательного значения, которое работает if:.

Таким образом, две следующие работы одинаково

<div data-bind="if: foo"></div> 
<div data-bind="if: foo()"></div> 

После того, как вы покинете мир простых выражений, заканчивающихся в наблюдаемой, вы, вероятно, также хотят, чтобы оставить сахар позади и всегда оценивать Наблюдаемые себя (для здравого смысла, если ничего еще).

Попробуйте следующее

<div data-bind="if: (property.aTrueValue() && property.anotherTrueValue())">... 
+0

Спасибо, это именно то, что мне нужно было сделать. –

3

Вы можете - если связывание просто принимает произвольное выражение. При выполнении более, чем просто ссылки на значение наблюдаемой, как это, вам нужно на самом деле назвать наблюдаемой следующим образом:

<div data-bind="if: (property.aTrueValue() && property.anotherTrueValue())">... 

Вот рабочий jsfiddle.

Смежные вопросы