2011-11-14 7 views
51

Este código produce el error (en Chrome): "No se puede encontrar comentarios etiqueta de cierre para que coincida con: ko foreach: MyPlans":Knockout.js no contenidos en recipientes "foreach" que no trabajan con <table>

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

Si utilizo una lista en su lugar, todo funciona:

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

Me gustaría utilizar el foreach sin contenedor con una tabla. ¿Hay algo que estoy haciendo mal? ¿Es un error?

Respuesta

87

Esto está relacionado con el hecho de que los navegadores insertan etiquetas tbody automáticamente, lo que crea una falta de coincidencia en los comentarios. El resultado representado se verá así:

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

Steve puso algo de trabajo en tratar de corregir las etiquetas no coinciden en KO, pero lo más fácil para usted que hacer es agregar el tbody sí mismo o añadir el tbody y poner su unión en eso.

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

es legal que una tabla tenga múltiples tbody etiquetas, si es necesario.

+1

¡Gracias! Esto aclara bastante las cosas. Me aseguraré de revisar el marcado real más cuidadosamente en el futuro. – Jag

+0

Como RP menciona que es legal tener varias etiquetas 'tbody'. Es útil agrupar filas, [aquí] (http://www.w3.org/TR/html401/struct/tables.html#h-11.2.3) hay más información. –

Cuestiones relacionadas