Нокаут.JS containerless "foreach" не работает


этот код выдает ошибку (в Chrome): "не удается найти закрывающий тег комментария для соответствия: ko foreach: MyPlans":

<table>
  <!-- ko foreach: MyPlans -->
    <tr>
      <td>Test</td>
    </tr>
  <!-- /ko -->
</table>

Если я использую список вместо этого, все работает:

<ul>
  <!-- ko foreach: MyPlans -->
    <li>
      Test
    </li>
  <!-- /ko -->
</ul>

Я хотел бы использовать бесконтейнерный foreach с таблицей. Я что-то делаю не так? Это баг?

1 51

1 ответ:

это связано с тем, что браузеры вставить tbody теги автоматически, что создает несоответствие в комментариях. Вывод рендеринга будет выглядеть так:

<table>
  <!-- ko foreach: MyPlans -->
  <tbody>
    <tr>
      <td>Test</td>
    </tr>
  <!-- /ko -->
  </tbody>
</table>

Стив действительно приложил некоторые усилия, пытаясь исправить несоответствующие теги в KO, но самое простое, что вам нужно сделать, это либо добавить tbody самостоятельно или добавить tbody и положите на него свою привязку.

<table>
  <tbody data-bind="foreach: MyPlans">
    <tr>
      <td>Test</td>
    </tr>
  </tbody>
</table>

это законно для таблицы, чтобы иметь несколько tbody теги, если это необходимо.