Knockout.js foreach повторяет элемент td в таблице, но не элемент tr

У меня есть следующая выдержка из таблицы, которую я использую для отображения большого количества файлов, полученных с сервера, с использованием MVC 4 и библиотеки knockout.js версии 2.1.0.

    <tr data-bind="foreach: files, visible: (files() && files().length > 0)">
        <td data-bind="text: UploadPath" />
        <td data-bind="text: FileName" />
    </tr>

Данные извлекаются правильно, однако foreach повторяет TD-элементы в таблице, а не TR. Поэтому, если есть 100 файлов, в таблице, отображаемой пользователю, будет 200 столбцов. Как заставить элемент TR повторить foreach файл?

Ответ 1

Просто поставьте привязку "foreach" в следующем (внешнем) элементе:

<table data-bind="foreach: files, ...">
    <tr>
        ...

Вы также можете использовать виртуальный элемент:

<!-- ko foreach: files -->
<tr>
    <td>
        ...
</tr>
<!-- /ko -->

Ответ 2

Я наткнулся на странную вещь:

Я пытался использовать привязку к контейнеру для повторения нескольких строк таблицы. KO жаловалась, что не может найти тег закрытия /ko.

У меня был заголовок таблицы, определенный выше привязки без контейнера. Если бы я изменил это на стандартную строку таблицы, все работало как ожидалось (кроме моего заголовка не было требуемого стиля, но я переопределяю это).

Надеюсь, это поможет кому-то, кто борется с этим - это всего лишь обходное решение, а не исправление.