Entra

View Full Version : [Jquery] DataTables e funzione di Callback


robertino_salemi
28-02-2014, 11:50
Salve a tutti,
sto utilizzando il tool DataTables (http://datatables.net/), in particolare la funzione di fnRowCallBack (http://datatables.net/release-datatables/examples/advanced_init/row_callback.html).

Funzionata tutto correttamente, ma prendendo in esame l'esempio presente:

"fnRowCallback": function( nRow, aData, iDisplayIndex ) {
/* Append the grade to the default row class name */
if ( aData[4] == "A" )
{
$('td:eq(4)', nRow).html( '<b>A</b>' );
}
},


se volessi allegare un'altra function di Callback come posso fare?

Non riesco a venirne a capo.

Grazie.

wingman87
28-02-2014, 11:55
Non puoi fare tutto lì dentro?

robertino_salemi
28-02-2014, 12:01
Si, certo, ad esempio se volessi inserire un


alert($("#alignmentTable_filter").height());


come dovrei integrarlo?

wingman87
28-02-2014, 12:11
Mi sa proprio che non ho capito cosa vuoi fare...
"fnRowCallback": function( nRow, aData, iDisplayIndex ) {
alert($("#alignmentTable_filter").height());
}

robertino_salemi
28-02-2014, 12:14
All'attuale funzione function( nRow, aData, iDisplayIndex ) vorrei accodare un'altra funzione per prendere le altezze dei vari DIV che compongono la tabella il che sono inizializzate solo dopo il rendering della tabella stessa.

wingman87
28-02-2014, 12:37
Ma quell'handler se ho capito bene viene chiamato per ogni riga dopo che è stata creata. Non ti servirebbe piuttosto un handler che viene chiamato quando la tabella è stata creata? Tipo fnDrawCallback ?
E poi i DIV di cui parli dove sono? Come è strutturato il tuo html?
Devi dare più informazioni perché così non si capisce, o almeno io non ho capito... Il codice che ti ho scritto prima non fa quello che ti aspettavi?

robertino_salemi
28-02-2014, 14:17
Ma quell'handler se ho capito bene viene chiamato per ogni riga dopo che è stata creata. Non ti servirebbe piuttosto un handler che viene chiamato quando la tabella è stata creata? Tipo fnDrawCallback ?
E poi i DIV di cui parli dove sono? Come è strutturato il tuo html?
Devi dare più informazioni perché così non si capisce, o almeno io non ho capito... Il codice che ti ho scritto prima non fa quello che ti aspettavi?

Esatto, avevi perfettamente ragione.
La fnRowCallback viene richiamata per ogni singola riga, mentre la fnDrawCallback viene richiamata a render ultimato.
Quindi all'interno di questa ho potuto applicare la mia funzione, cioè:

"fnDrawCallback": function (oSettings) {
var customHeightTable = $(window).height() - (
$("header").outerHeight(true) +
$("#pageTitle").outerHeight(true) +
$(".report-filter").outerHeight(true) +
$("#alignmentTable_filter").outerHeight(true) +
$(".dataTables_scrollHead").outerHeight(true) +
$("#alignmentTable_info").outerHeight(true) +
$("#legend").outerHeight(true));
$(".dataTables_scrollBody").css("height", customHeightTable);

e quindi permettere di avere un'altezza della tabella tale da riempirmi tutta la finestra del mio browser senza ulteriori scroll associati alla finestra stessa.

Un'ultimo consiglio: siccome vorrei cercare di centralizzare questa funzione e poterla applicare anche ad altre pagine, come posso verificare se un DIV è presente in una pagina così da non generare un errore JS?

Grazie.

Tuvok-LuR-
28-02-2014, 15:12
Un'ultimo consiglio: siccome vorrei cercare di centralizzare questa funzione e poterla applicare anche ad altre pagine, come posso verificare se un DIV è presente in una pagina così da non generare un errore JS?

Grazie.
se chiami una funzione su un $('#selettore') che non trova nulla non hai nessun errore, semplicemente non succede niente

robertino_salemi
28-02-2014, 15:35
Veramente? Ottimo! ;)