2012-08-24 1 views
10

Ho il seguente estratto da una tabella che sto usando per visualizzare un sacco di file recuperati da un server, usando MVC 4 e il knockout.js versione della libreria 2.1.0.knockout.js foreach ripete l'elemento td nella tabella, ma non l'elemento tr

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

I dati vengono recuperati correttamente, tuttavia foreach sta ripetendo gli elementi TD nella tabella e non il TR. Quindi se ci sono 100 file, ci saranno 200 colonne nella tabella visualizzata all'utente. Come posso fare in modo che l'elemento TR ripeta il file?

risposta

23

In poche parole la "foreach" vincolante nel successivo elemento (esterno):

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

È possibile anche utilizzare un elemento virtuale:

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

Mi stavo piegando in quel modo, ma non sapevo se volevo passare a un altro tavolo o non solo per visualizzare i dati del file. Grazie per la rapida risposta. –

1

mi sono imbattuto in una cosa strana:

Stavo cercando di utilizzare un binding containerless per ripetere più righe di tabella. KO si è lamentato di non riuscire a trovare il tag di chiusura/ko.

Avevo un'intestazione di tabella definita sopra l'associazione senza contenitore. Se l'ho modificato in una riga standard della tabella, tutto ha funzionato come previsto (a parte il mio header non aveva lo stile richiesto ma l'ho sovrascritto).

Spero che questo aiuti qualcun altro a lottare con questo: è solo una soluzione alternativa piuttosto che una soluzione.

+0

Ran nella stessa cosa, soluzione qui: http://stackoverflow.com/a/8116017/423231 –

+0

Grazie. Pensavo di aver fatto ricerche abbastanza approfondite ma ovviamente no! Tutto ha senso ora. – mhall