Ответ 1
Когда Knockout обрабатывает ваши привязки, он сначала оценивает ваше выражение.
Если выражение приводит к наблюдаемому, оно затем оценивает наблюдаемое как удобство для получения окончательного значения, которое работает if:
Итак, две следующие работы тождественно
<div data-bind="if: foo"></div>
<div data-bind="if: foo()"></div>
Как только вы покинете мир простых выражений, оканчивающихся на наблюдаемый, вы, вероятно, также захотите оставить сахара позади и всегда оценивать наблюдаемые сами (для здравого смысла, если ничего другого).
Попробуйте выполнить
<div data-bind="if: (property.aTrueValue() && property.anotherTrueValue())">...