Могут ли привязки Knockout.js применяться к тегам контейнера и к потомкам?
Позвольте мне задать вопрос с простым делом.
У меня есть таблица HTML, строки которой контролируются массивом observableArray. Это прекрасно работает.
Однако если observableArray содержит ноль элементов, я хочу, чтобы об этом говорила одна строка. Я попробовал эту разметку, которая "вид" работает:
<tbody data-bind="if: $root.data.contacts().length == 0">
<tr>
<td>There are no contacts specified yet.</td>
</tr>
</tbody>
<tbody data-bind="foreach: $root.data.contacts">
SNIP - a tbody with the rows is here when elements > zero
</tbody>
Когда я говорю «вид», я имею в виду ВИДИМО. Он действительно отображается с нулевыми элементами и действительно уходит на> нулевые элементы, как вы ожидаете. Однако, когда вы открываете инспектор DOM (средства разработки) и смотрите на DOM в памяти, вы обнаружите, что есть дваTBODY разделы, а не один. Теперь одинTBODY всегда пусто конечно, нодваTBODY теги не верны в HTML5, поэтому это нужно исправить это не желаемая разметка.
Будучи новичком в нокауте, я попытался решить эту проблему с помощью виртуального элемента:
<!-- ko if: $root.data.contacts().length == 0 -->
<tbody>
<tr>
<td>There are no contacts specified yet.</td>
</tr>
</tbody>
<!-- /ko -->
К сожалению, это не работает для нашего процесса сборки: мы минимизируем HTML до сжатия, а комментарии удаляются.
У меня сложилось впечатление, что привязки КО применимы как к КОНТЕЙНЕРНОМУ ЭЛЕМЕНТУ, так и к потомкам, но, похоже, это не так. Есть ли способ сообщить KO, что он применяется к элементам контейнера, а также к дочерним элементам, или мне нужно каким-то образом изменить разметку ДРУГЕ, чем виртуальный контейнер?