2012-08-24 12 views
10

Tengo el siguiente extracto de una tabla que estoy usando para mostrar una gran cantidad de archivos recuperados de un servidor, utilizando MVC 4 y knockout.js biblioteca versión 2.1.0.knockout.js foreach repite el elemento td en la tabla, pero no el elemento tr

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

Los datos se recuperan correctamente, sin embargo, foreach repite los elementos TD en la tabla y no el TR. Entonces, si hay 100 archivos, habrá 200 columnas en la tabla que se mostrará al usuario. ¿Cómo puedo hacer que el elemento TR repita el archivo foreach?

Respuesta

23

En pocas palabras el "foreach" vinculante en el siguiente elemento (externa):

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

También se puede utilizar un elemento virtual:

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

Me estaba inclinando de esa manera, pero no sabía si quería otra tabla o no solo para mostrar los datos del archivo. Gracias por su pronta respuesta. –

1

me encontré con una cosa extraña:

Estaba intentando utilizar un enlace sin contenedor para repetir varias filas de la tabla. KO se quejó de que no pudo encontrar la etiqueta de cierre/ko.

Tenía un encabezado de tabla definido encima del enlace sin contenedor. Si cambié esto a una fila de tabla estándar todo funcionó como se esperaba (excepto que mi encabezado no tenía el estilo requerido pero lo anulo).

Espero que esto ayude a alguien más a luchar con esto: es solo una solución en lugar de una solución.

+0

Encontré en esto mismo, solución aquí: http://stackoverflow.com/a/8116017/423231 –

+0

Gracias. ¡Pensé que lo había investigado completamente, pero obviamente no! Todo tiene sentido ahora. – mhall

Cuestiones relacionadas