Ricaricare jqGrid con i nuovi dati

Ho questa semplice funzione

function createGrid(limit){
    $("#list").trigger("reloadGrid"); 
    $("#list").jqGrid({
        url:indexObj.gridUrl,
        postData:{
            "limit":limit
        },
        datatype: "json",
        colNames:['ID','type','folder','Description'],
        colModel:[
            {name:'id',index:'id', width:50},
            {name:'type',index:'type', width:100},
            {name:'folder_id',index:'folder_id', width:100},
            {name:'description',index:'description', width:200} 
        ]
    });
}

Ho chiamata con limite = 1 e si chiama il server e restituisce i dati giusti.
Allora chiamo limite = 2 e si ripete la precedente chiamata ajax (con limite=1) e restituisce gli stessi dati di corso.

Perché postData in realtà non cambia? Vedo in fireBug che il “limite” non è il valore corretto.

OriginaleL’autore Theodore K. | 2015-02-04

2 Replies
  1. 11

    O durante la ricarica è possibile utilizzare setGridParam per il reset postData,

    $("#list").jqGrid('setGridParam', { 
            postData: {"limit":limit }
     }).trigger('reloadGrid'); 

    E, non è necessario reinizializzare/creare jqGrid ma si può semplicemente utilizzare:

    function createGrid(limit){
        $("#list").trigger("reloadGrid"); 
        #Code Goes here#
    }

    OriginaleL’autore Runcorn

  2. 5

    Non sono sicuro che il costrutto con memorizzazione nella cache dei dati è buona, ma comunque il tuo problema attuale è chiaro.

    È importante capire che la chiamata

    $("#list").jqGrid({
        url:indexObj.gridUrl,
        ...
    });

    crea la griglia. Converte vuoto <table id="list"></table> molto complessa struttura dei div e tabelle. Così si può creare la griglia solo una volta.

    Griglia sono costituiti da molte parti (come intestazioni) che non hanno bisogno di essere ricreato al successivo riempimento della griglia. Così jqGrid fornisce reloadGrid evento che può essere attivato per riempire il corpo della griglia. Se jqGrid hanno postData con un po ‘ di valore come

    postData: {
        limit: limitVar
    }

    quindi se significa che il valore dell’oggetto di postData sarà creato e inizializzato una volta con il valore corrente di limitVar variabile. Se si dispone di esterno variabile (globale, o definito in ambito esterno), allora è possibile utilizzare

    postData: {
        limit: function () { return limitVar; }
    }

    Nel caso si avranno corrente valore di limitVar come valore di limit parametro dell’URL. Dal modo in cui se l’utente è sufficiente fare clic sull’intestazione di una colonna, la griglia bisogno di essere ordinati e jqGrid farà la nuova richiesta HTTP al url. Se si utilizza function all’interno di postData quindi si avrà corrente valore di limitVar nei casi di troppo.

    Se si potrà fare a meno di modifiche nel codice esistente allora si può sostituire la riga $("#list").trigger("reloadGrid"); (assolutamente non necessari nell’attuale codice

    $("#list").jqGrid("GridUnload");

    Distruggerà precedentemente creata la struttura di immersioni e tabelle (che costruire la griglia) e si crea un vuoto <table id="list"></table> nello stesso posto. Quindi, è possibile ricreare la griglia. Tale codice non funzionerà in modo efficace, ma può essere molto utile in alcuni scenari (vedi la risposta e questo per esempio).

    Stranamente, ho un “jqGrid – Nessun tale metodo: GridUnload” errore in $(“#list”).jqGrid(“GridUnload”);
    Si dovrebbe verificare jqGrid cui è stato caricato. Probabilmente hai usato custom scaricare da qui e non hai incluso il custom modulo (vedi qui)? Mi consiglia di includere jquery.jqGrid.src.js. È possibile aprire il file in un editor di testo e di ricerca per GridUnload.

    OriginaleL’autore Oleg

Lascia un commento