web-dev-qa-db-ja.com

Knockout.jsコンテナなしの「foreach」が<table>で機能しない

このコードはエラーをスローします(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を使用したいと思います。私が間違っていることはありますか?バグですか?

52
Jag

これは、ブラウザがtbodyタグを自動的に挿入するため、コメントに不一致が生じることに関連しています。レンダリングされた出力は次のようになります。

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

SteveはKOで不一致のタグを修正するためにいくつかの作業を行いましたが、あなたが行う最も簡単なことは、tbodyを自分で追加するか、tbodyを追加してバインディングをそれに置くことです。

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

必要に応じて、テーブルが複数のtbodyタグを持つことは正当です。

89
RP Niemeyer