2011-11-14 3 views
51

Ce code lance l'erreur (Chrome): "Vous ne trouvez pas la fermeture de balise de commentaire pour correspondre: ko foreach: MyPlans":Knockout.js de "foreach" ne fonctionne pas avec <table>

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

Si j'utilise un liste à la place, tout fonctionne:

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

Je voudrais utiliser le foreach sans récipient avec une table. Y a-t-il quelque chose que je fais de mal? Est-ce un bug?

Répondre

87

Ceci est lié au fait que les navigateurs insèrent automatiquement les balises tbody, ce qui crée une discordance dans les commentaires. La sortie rendu ressemblera:

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

Steve avait mis un peu de travail à essayer de corriger les étiquettes ne correspondent pas à KO, mais la chose la plus facile pour vous de faire est soit ajouter le tbody vous-même ou ajouter le tbody et mettre votre fixation dessus.

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

Il tbody d'avoir plusieurs balises est légal pour une table, si nécessaire.

+1

Merci! Cela clarifie un peu les choses. Je vais être sûr de vérifier le balisage actuel plus attentivement. – Jag

+0

Comme le mentionne RP, il est légal d'avoir plusieurs balises 'tbody'. Il est utile de grouper les lignes, [ici] (http://www.w3.org/TR/html401/struct/tables.html#h-11.2.3) est plus d'informations. –

Questions connexes