Подтвердить что ты не робот

Привязка видимого параметра к выражению 'или' в нокауте

Я хотел бы привязать видимое свойство к true, когда одно из двух условий истинно. Что-то вроде следующего

 <tr data-bind="visible: active || $parent.displayDeactive">....</tr>

Мой код работает, когда я делаю одно или другое привязки, но не тогда, когда я помещаю || там. Я не нашел никакой документации, в которой говорится, что я могу поместить какую-либо логику в эту привязку, но если я не могу сделать это напрямую, что это лучший способ сделать это, поскольку я связываю свойство шаблона и один объект $родительский режим просмотра.

4b9b3361

Ответ 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).