2010-04-24 20 views

Odpowiedz

17

Jeśli szukasz czegoś podobnego DisplayLoadingMessage() funkcji. Nie istnieje w jqGrid. Możesz ustawić opcję loadui z jqGrid na włączyć (domyślnie), wyłączyć lub blok. Osobiście wolę blok blok. (patrz http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options). Ale myślę, że nie tego chciałeś.

Jedyne, co możesz zrobić, jeśli podoba Ci się komunikat "Ładowanie ..." z jqGrid, to zrobić to samo. Wyjaśnię tutaj, co robi jqGrid, aby wyświetlić tę wiadomość: Zostaną utworzone dwa ukryte elementy div. Jeśli masz siatkę z id = listy, to DIV będzie wyglądał następujące:

<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> 

gdzie tekst „Ładowanie ...” lub „lädt ...” (w języku niemieckim) pochodzi z $.jgrid.defaults.loadtext. Identyfikator elementów div zostanie utworzony z przedrostka "lui_" lub "load_" oraz identyfikatora siatki ("lista"). Przed wysłaniem zapytania ajax jqGrid sprawia, że ​​jeden lub dwa z tych div są widoczne. Wywołuje funkcję jQuery.show() dla drugiego div (id = "load_list"), jeśli opcja loadui to enable. Jeśli jednak opcja loadui to blok, wówczas oba elementy div (id = "lui_list" i id = "load_list") będą wyświetlane w odniesieniu do funkcji .show(). Po zakończeniu żądania ajax .hide() funkcja jQuery zostanie wywołana dla jednego lub dwóch elementów div. To wszystko.

Znajdziesz definicję wszystkich klas css w ui.jqgrid.css lub jquery-ui-1.8.custom.css.

Teraz masz dość informacji, aby odtworzyć wiadomość "Ładowanie ..." jqGrid, ale gdybym był tobą, pomyślałbym jeszcze raz, czy naprawdę chcesz to zrobić, czy też jQuery blockUI plugin jest lepsze dla twoich celów.

+0

Dzięki za szczegółowe res ponse! Wow, podany link opcji naprawdę daje mi dostęp do podbrzusza bestii jqGrid, która, niestety, była całkowicie nieświadoma do tej pory. Zauważyłem, że dokumentacja jqGrid jest nieco sprzeczna z intuicją i trudna do naśladowania, ale wciąż się do tego przyzwyczajam. W grę wchodzi trochę krzywej uczenia się. Będę zabawiał się divem "load_list", aby sprawdzić, czy uda mi się go odtworzyć ładnie. Mogę skończyć odwoływanie się do jQuery BlockUI zgodnie z zaleceniami. Ale przynajmniej czuję, że mam teraz opcje (nie gra słów). – gurun8

+0

Nie zajęło mi dużo czasu, aby dojść do wniosku, że wszystko, co muszę zrobić, aby osiągnąć mój cel, to: $ ("# load_list"). Show(); $ ("# load_list"). Css ("z-index", 1000); i $ ("# lista_load"). Hide(); $ ("# load_list"). Css ("z-index", 101); Musiałem zmienić i przywrócić indeks z, aby wyświetlić div w moim niestandardowym oknie dialogowym. Po prostu pomyślałem, że się podzielę. – gurun8

1

Styl nadpisania to [.ui-jqgrid .loading].

+0

Dotyczy to tylko "Ładowanie ..." w środku siatki, a nie nakładki okna, która blokuje dostęp do siatki podczas ładowania – Jimbo

0

Możesz wywołać $ ("# load _"). Show() i .hide() gdzie jest id twojej siatki.

7

używam

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

działa dobrze bez tworzenia nowych div

2

Właśnie umieszczone poniżej linii w onSelectRow wydarzeniem siatki JQ to działało.

$ (".ładowanie").pokazać();

0

to jest pełne problemów z $ ("div.loading"). Show(); Jest również przydatny nawet inne składniki

$('#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

Jak wspomniano przez @Oleg mają wiele dobrych cech podczas rozwijania aplikacji AJAX bazowych. Dzięki niemu można zablokować cały UI lub konkretnego elementu o nazwie element Block

Dla jqGrid Możesz umieścić siatkę w div (sampleGrid), a następnie zablokować siatkę jako:

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

Prosty, aby pokazać :

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

Następnie ukryć go ponownie

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

Proszę zwrócić uwagę podczas wysyłania do starego wątku, który ma kilka innych odpowiedzi, szczególnie gdy jeden z nich jest akceptowany. Musisz wyjaśnić, dlaczego twoja odpowiedź jest lepsza niż wszystkie istniejące. – APC

+0

Dzięki! ta odpowiedź jest lepsza od pozostałych, ponieważ (1) jest bardzo krótka i (2) obsługuje przypadek dwóch siatek na tej samej stronie. –