2010-04-24 19 views
13

Qualcuno sa come attivare la sovrapposizione jqGrid "Caricamento in corso ..." che viene visualizzata quando viene caricata la griglia? So che posso usare un plugin jQuery senza troppi sforzi, ma mi piacerebbe essere in grado di mantenere il look-n-feel della mia applicazione coerente con quello di ciò che è già usato in jqGrid.jqGrid trigger "Loading ..." overlay

Il chiude cosa che ho trovato è questo:

jqGrid display default "loading" message when updating a table/on custom update

  • n8

risposta

17

Se siete alla ricerca di qualcosa di simile a DisplayLoadingMessage() funzione. Non esiste in jqGrid. È possibile impostare solo l'loadui possibilità di jqGrid per abilitare (default), disabilitare o blocco. Personalmente preferisco il blocco . (vedi http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options). Ma penso che non sia quello che volevi.

L'unica cosa che puoi fare, se ti piace il messaggio "Caricamento in corso ..." di jqGrid, è quello di fare lo stesso. Spiegherò qui cosa fa jqGrid per visualizzare questo messaggio: verranno create due immersioni nascoste. Se si dispone di una griglia con id = lista, questo div sarà simile seguente:

<div style="display: none" id="lui_list" 
    class="ui-widget-overlay jqgrid-overlay"></div> 
<div style="display: none" id="load_list" 
    class="loading ui-state-default ui-state-active">Loading...</div> 

dove il testo "Caricamento ..." o "lädt ..." (in tedesco) viene da $.jgrid.defaults.loadtext. Gli ID di div saranno costruiti dal prefisso "lui_" o "load_" e dalla griglia id ("elenco"). Prima di inviare una richiesta jaxGrid rende visibili una o due di queste div. Chiama la funzione jQuery.show() per il secondo div (id = "elenco_carico") se l'opzione loadui è abilita. Se l'opzione loadui è il blocco, tuttavia, entrambe le div (id = "lui_list" e id = "lista_pista") verranno visualizzate con riferimento alla funzione .show(). Dopo la fine della richiesta Ajax .hide(), la funzione jQuery sarà chiamata per uno o due div. È tutto

Troverete la definizione di tutte le classi css in ui.jqgrid.css o jquery-ui-1.8.custom.css.

Ora hai abbastanza informazioni per riprodurre il messaggio "Caricamento in corso ..." di jqGrid, ma se fossi in te, ci penserei ancora una volta se vuoi davvero farlo o se lo jQuery blockUI plugin è meglio per i tuoi obiettivi.

+0

Grazie per la res dettagliate ponse! Wow, il collegamento Opzioni che mi hai fornito mi dà davvero accesso al punto debole della bestia jqGrid che, purtroppo, fino ad ora non ne sapevo assolutamente nulla. Ho trovato la documentazione di jqGrid un po 'contro-intuitiva e difficile da seguire, ma mi sto scaldando. C'è un po 'di una curva di apprendimento coinvolti. Giocherò con il div "load_list" per vedere se riesco a farlo funzionare bene. Potrei finire per ricorrere a jQuery BlockUI come prescritto. Ma almeno mi sento come se avessi delle opzioni (senza giochi di parole) ora. – gurun8

+0

Non mi ci è voluto molto tempo per capire che tutto ciò che dovevo fare per raggiungere il mio obiettivo era il seguente: $ ("# load_list"). Show(); $ ("# load_list"). Css ("z-index", 1000); e $ ("# load_list"). Hide(); $ ("# load_list"). Css ("z-index", 101); Ho dovuto modificare e reimpostare lo z-index per visualizzare il div sulla mia finestra di dialogo personalizzata. Ho pensato di condividere. – gurun8

1

Lo stile da sovrascrivere è [.ui-jqgrid .loading].

+0

Questo si applica solo al "Caricamento in corso ..." nel mezzo della griglia, non alla sovrapposizione della finestra che blocca l'accesso alla griglia durante il caricamento – Jimbo

0

Puoi chiamare $ ("# load _"). Show() e .hide() dove è l'id della tua griglia.

7

Io uso

 $('.loading').show(); 
     $('.loading').hide(); 

Funziona bene senza creare nuovi div

2

ho appena messo sotto la linea in onSelectRow caso di griglia JQ ha funzionato.

$ ('. Caricamento').mostrare();

0

è preoccupante con $ ('div.loading'). Show(); Questo è anche utile anche altri componenti

$('#editDiv').dialog({ 
      modal : true, 
      width : 'auto', 
      height : 'auto', 
      buttons : { 
       Ok : function() { 
        //Call Action to read wo and 
        **$('div.loading').show();** 

        var status = call(...) 
        if(status){ 
         $.ajax({ 
          type : "POST", 
          url : "./test", 
          data : { 
           ... 
          }, 
          async : false, 
          success : function(data) { 

           retVal = true; 
          }, 
          error : function(xhr, status) { 


           retVal = false; 
          } 
         }); 
        } 
        if (retVal == true) { 
         retVal = true; 
         $(this).dialog('close'); 
        } 
        **$('div.loading').hide();** 
       }, 
       Cancel : function() { 
        retVal = false; 
        $(this).dialog('close'); 
       } 

      } 
     }); 
0

Come detto da @Oleg il hanno un sacco di buone caratteristiche durante lo sviluppo di un applicazioni di banche ajax. Con esso è possibile bloccare tutta la UI o un elemento specifico chiamato element Block

Per il jqGrid si può mettere la griglia in un div (sampleGrid) e quindi bloccare la griglia come:

$.extend($.jgrid.defaults, { 
    ajaxGridOptions : { 
     beforeSend: function(xhr) { 
      $("#sampleGrid").block(); 
     }, 
     complete: function(xhr) { 
      $("#sampleGrid").unblock(); 
     }, 
     error: function(jqXHR, textStatus, errorThrown) { 
      $("#sampleGrid").unblock(); 
     } 
    } 
}); 
3

semplice, per mostrarlo :

$("#myGrid").closest(".ui-jqgrid").find('.loading').show(); 

Poi per nascondere di nuovo

$("#myGrid").closest(".ui-jqgrid").find('.loading').hide(); 
+1

Si prega di prestare attenzione quando si registra su un thread vecchio che ha diverse altre risposte, specialmente quando uno di loro è accettato. Devi spiegare perché la tua risposta è migliore di tutte quelle esistenti. – APC

+0

Grazie !! questa risposta è migliore delle altre perché (1) è molto breve e (2) gestisce il caso di due griglia sulla stessa pagina. –