Привязывание видимого параметра с оператором 'или' в нокауте
-
26-10-2019 - |
Вопрос
Я хотел бы связать видимое свойство, чтобы быть правдой, когда одно из двух условий верно. Что -то вроде следующего
<tr data-bind="visible: active || $parent.displayDeactive">....</tr>
Мой код работает, когда я делаю одну или другое привязки, но не когда я помещаю || там. Я не нашел никакой документации, в которой говорится, что я могу внести какую -либо логику в этом привязке, но если я не могу сделать это напрямую, как это следует сделать, так как я связываю свойство шаблона и один объект $ родительский просмотр.
Решение
Если вы используете значение наблюдаемого в выражении, вам необходимо ссылаться на них как функцию. Так что если active
а также displayDeactive
вы сможете сделать: вы бы сделали:
data-bind="visible: active() || $parent.displayDeactive()"
Есть несколько способов переместить его в модель View, вы могли бы:
- Создать вычисленное наблюдение за ребенком (функция должна быть в состоянии ссылаться на родитель)
- Создайте функцию для родителя, которая принимает ребенка и возвращает ваше значение (привязки выполняются в вычисленном наблюдаемом, поэтому он снова будет стрелять, когда все это наблюдает, что он обращается к изменениям)
- Создайте функцию для ребенка, которая принимает родитель и возвращает значение (то же примечание, что и выше)
Образец логики в привязке и использование функции на родителе здесь: http://jsfiddle.net/rniemeyer/f6zgh/
Другие советы
Добавьте парус после наблюдаемых, так как вы их оцениваете.
<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 ответил этим тоже ... i +1'd).