2013-06-26 3 views
7

Ho filtri al di fuori di jqGrid che dovrebbe attivare una ricarica della griglia. Questa voce mi ha fornito alcune informazioni utili su come implementarlo, utilizzando l'opzione postData: How to filter the jqGrid data NOT using the built in search/filter box Sfortunatamente i frammenti di codice sono frammenti e non riesco a capire quale dovrebbe essere la sequenza generale di chiamate. Ecco una vista condensata del mio approccio attuale:jqGrid: come richiamare "reloadGrid" per aggiornare la griglia dai filtri esterni

<script> 
    $(document).ready(function() { 
    $("#submit").click(function(e) { 
     e.preventDefault(); 
     myGrid.trigger('reloadGrid'); 
    }); 
    }); 

var url="${servicesUrl}/projects"; 

var myGrid = $("#projectList").jqGrid({ 
    url: url, 
    datatype: 'json', 
    mtype: 'GET', 
    // ... 
}); 
</script> 

Come dovrei strutturare il codice in modo che ogni clic del pulsante Invia attiverà un ricaricamento della griglia? Una volta risolto il problema, sono sicuro che potrò aggiungere la parte posData, il mio problema riguarda principalmente la sequenza generale delle chiamate. Non sono sicuro di quali chiamate debbano essere contenute nella funzione ready() e come chiamare correttamente 'reloadGrid'. Qualsiasi aiuto molto apprezzato.

risposta

6

Questo è ciò che ha funzionato per me: ho impostato una richiamata sull'evento beforeRequest che aggiorna la proprietà postData prima di ogni richiesta.

noti che si vuole mettere tutto il codice di inizializzazione jqGrid all'interno della funzione $(document).ready(function(){});, altrimenti il ​​vostro elemento tabella non può essere nel DOM ancora

var url="${servicesUrl}/projects"; 

$(document).ready(function() { 
    var $table = $("#projectList"); 

    $table.jqGrid({ 
     url: url, 
     datatype: 'json', 
     mtype: 'GET', 

     beforeRequest: function() { 
      var postData = $table.getGridParam('postData'); 
      //add parameters to postData here 
     } 
     // ... 
    }); 

    $("#submit").click(function(e) { 
     e.preventDefault(); 
     $table.trigger('reloadGrid'); 
    }); 
}); 
+1

grazie! Ho solo dovuto seguire la sequenza di chiamate che hai fornito e ha funzionato perfettamente. In effetti, non avevo bisogno di usare "beforeRequest", l'ho appena aggiunto alle mie opzioni di griglia: postData: { \t \t brandId: function() {return jQuery ("# ​​brandsDropdown option: selected"). Val() ; }, \t \t}, – Pablo

+0

@Pablo Ah ... bello, non sapevo che potresti utilizzare le funzioni per i dati post! Grazie! – cfs