Привязка видимого параметра к выражению 'или' в нокауте
Я хотел бы привязать видимое свойство к true, когда одно из двух условий истинно. Что-то вроде следующего
<tr data-bind="visible: active || $parent.displayDeactive">....</tr>
Мой код работает, когда я делаю одно или другое привязки, но не тогда, когда я помещаю || там. Я не нашел никакой документации, в которой говорится, что я могу поместить какую-либо логику в эту привязку, но если я не могу сделать это напрямую, что это лучший способ сделать это, поскольку я связываю свойство шаблона и один объект $родительский режим просмотра.
Ответы
Ответ 1
Если вы используете значение наблюдаемого в выражении, вам нужно ссылаться на них как на функцию. Итак, если active
и displayDeactive
являются наблюдаемыми, вы должны:
data-bind="visible: active() || $parent.displayDeactive()"
Есть несколько способов переместить его в модель просмотра, вы можете:
- создать вычисленный наблюдаемый для ребенка (функция должна иметь возможность ссылаться на родителя)
- создать функцию родителя, который принимает дочерний элемент и возвращает ваше значение (привязки выполняются в вычисленном наблюдаемом, поэтому он будет срабатывать снова, когда любой наблюдаемый, что он обратится к изменениям)
- создать функцию для дочернего элемента, которая принимает родительский элемент и возвращает значение (такое же примечание, как указано выше)
Пример логики в привязке и использование функции для родителя здесь: http://jsfiddle.net/rniemeyer/f6ZgH/
Ответ 2
Добавьте parens после наблюдаемых, поскольку вы их оцениваете.
<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>
Здесь вы можете найти полный код: http://jsfiddle.net/johnpapa/gsnUs/
Вы можете использовать вычисленное свойство в шаблоне, который оценивает выражение (просто увидел, что @RPNiemeyer ответил на это тоже... я + 1'd).