2012-06-07 3 views
5

Sto utilizzando il plug-in dataQuables jQuery per creare tabelle avanzate per la nostra applicazione. Uno dei requisiti è avere file "comprimibili" (non gruppi!): Ad es. le righe rappresentano campagne e potrebbero avere campagne figlio. La struttura delle righe figlio è (nel caso base) la stessa della tabella padre - stesse celle, stessi tipi di dati.jQuery dataTables aggiunge più file comprimibili utilizzando la funzione API fnOpen()

Ma le righe figlio non dovrebbero influenzare la tabella genitore stessa: voglio dire, il numero di righe per pagina dovrebbe rimanere lo stesso, le righe figlio non dovrebbero essere ordinate separatamente dalla riga padre, dovrebbero sempre rimanere legate . Pertanto non posso usare la funzione API fnAddData() per quello.

E l'altro requisito difficile è la possibilità di avere righe multilivello pieghevoli (ad esempio campagne bambino per campagne bambini, ecc)

Sono stato con il fnOpen() funzione API per offrire la possibilità per "aprire" qualsiasi riga, aggiunge un blocco figlio ad esso, e generalmente puoi inserire lì qualunque cosa tu voglia. Stava funzionando bene in datatables 1.8.2, ho usato codice simile per generare righe figlio:

$(childRowData).each(function(){ 
    row = $(oTable.fnOpen(row.get(0), $(this), "child_row")); 
    $(row).addClass('child_row'); 
}); 

Generalmente, "aperto" la riga corrente (definito sopra), i dati inseriti nella riga bambino, allora nel ciclo "aperto" la riga figlio, aggiunto un figlio ad esso, ecc.

Ma a partire da dataTables 1.9.0 sembra che sia consentito solo "aprire" le righe parent e farlo una sola volta.

Naturalmente, posso creare un sub-tavolo, applicare $ .dataTable() ad esso e inserirla nella riga bambino, ma sembra una soluzione un po 'zoppo e costosa, soprattutto quando potremmo avere 3 -4 livelli di profondità.

Esiste un altro modo per implementare righe comprimibili in dataTable?

+0

Quindi, sembra che non ci sia modo di farlo senza modificare il codice DataTables. Non vogliamo farlo, quindi sono dovuto andare con i tavoli nidificati. –

risposta

0

Quando crei la riga figlio che ha i figli secondari, stai probabilmente facendo rotolare la tua soluzione. Stavo facendo alcune cose simili a questo qualche settimana fa con i dati e questo è stato il meglio che ho potuto inventare .

6

DataTable è stato aggiornato in qualche modo ed è molto semplice ora per l'aggiunta di bambini righe righe padre: http://datatables.net/reference/api/row().child()

Una delle cose non proprio ovvia, è nel caso in cui si desidera utilizzare gli stessi layout per i vostri bambini le righe come per le righe parent, è necessario utilizzare il selettore jquery, per passare un nodo anziché una stringa (scritto nella documentazione ma l'ho perso la prima volta).

Doint che è corretto:

.child(
    $(
     '<tr>'+ 
      '<td>'+rowIdx+'.1</td>'+ 
      '<td>'+rowIdx+'.2</td>'+ 
      '<td>'+rowIdx+'.3</td>'+ 
      '<td>'+rowIdx+'.4</td>' 
     '</tr>' 
    ) 
) 

Ma facendo ciò che è sbagliato: (sarà inserire il "tr" in un "td" con un colspan delle dimensioni del vostro tavolo e sarà ovviamente rompere il allineamento colonne)

.child(
    '<tr>'+ 
     '<td>'+rowIdx+'.1</td>'+ 
     '<td>'+rowIdx+'.2</td>'+ 
     '<td>'+rowIdx+'.3</td>'+ 
     '<td>'+rowIdx+'.4</td>' 
    '</tr>' 
) 
+0

Hai salvato una vita oggi. Grazie mille –