2010-04-24 1 views
13

Кто-нибудь знает, как вызвать накладку jqGrid «Загрузка ...», которая отображается при загрузке сетки? Я знаю, что я могу использовать плагин jquery без особых усилий, но я бы хотел, чтобы поддерживать внешний вид моего приложения в соответствии с тем, что уже используется в jqGrid.jqGrid триггер «Loading ...» overlay

Замкнутая вещь я нашел это:

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

  • n8

ответ

17

Если вы ищете что-то вроде DisplayLoadingMessage() функции. Это не существует в jqGrid. Вы можете установить только loadui вариант jqGrid для включения (по умолчанию), отключить или блок. Я лично предпочитаю блок. (см. http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options). Но я думаю, что это не то, что вы хотели.

Единственное, что вы можете сделать, если вам нравится сообщение «Loading ...» от jqGrid, - это сделать то же самое. Я объясню здесь, что делает jqGrid для отображения этого сообщения: будут созданы два скрытых div. Если у вас есть сетка с ид = списком, это дива будет выглядеть следующим образом:

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

где текст «Загрузка ...» или «Lädt ...» (на немецком языке) происходит от $.jgrid.defaults.loadtext. Иды divs будут построены из префикса «lui_» или «load_» и идентификатора сетки («список»). Перед отправкой запроса ajax jqGrid отображает один или два из этих разделов. Он вызывает функцию jQuery.show() для второго div (id = "load_list"), если loadui опция enable. Если loadui опция блок, то оба divs (id = "lui_list" и id = "load_list") будут показаны относительно функции .show(). После завершения запроса ajax .hide() Функция jQuery будет вызываться для одного или двух div. Это все.

Вы найдете определение всех классов css в ui.jqgrid.css или jquery-ui-1.8.custom.css.

Теперь у вас достаточно информации для воспроизведения сообщения jqGrid «Загрузка ...», но если бы я был вами, я бы подумал еще раз, действительно ли вы это хотите или же jQuery blockUI plugin лучше для ваших целей.

+0

Спасибо за подробный Рез Понс! Ничего себе, ссылка «Параметры», которую вы предоставили, действительно дает мне доступ к подбрюшью зверя jqGrid, который, к сожалению, я до сих пор не знал об этом. Я нашел документацию jqGrid немного противоречащей интуиции и трудно следовать, но я разогреваю ее. Есть немного кривая обучения. Я поиграю с div «load_list», чтобы посмотреть, могу ли я заставить его играть хорошо. Я могу в конечном итоге прибегнуть к блоку jQuery BlockUI, как это предписано. Но, по крайней мере, я чувствую, что теперь у меня есть варианты (не каламбур). – gurun8

+0

Мне не нужно было много времени, чтобы выяснить, что все, что мне нужно для достижения своей цели, было следующее: $ ("# load_list"). Show(); $ ("# load_list"). Css ("z-index", 1000); и $ ("# load_list"). Hide(); $ ("# load_list"). Css ("z-index", 101); Мне пришлось изменить и восстановить z-индекс, чтобы отобразить div над моим настраиваемым диалоговым окном. Просто подумал, что я поделюсь. – gurun8

1

Стиль для переопределения - [.ui-jqgrid .loading].

+0

Это относится только к «Загрузка ...» в середине сетки, хотя не оверлей окна, которые блокируют доступ к сетке при загрузке. – Jimbo

0

Вы можете вызвать $ ("# load _"). Show() и .hide(), где находится идентификатор вашей сетки.

7

Я использую

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

Он отлично работает без создания каких-либо новых див

2

Я просто помещенный ниже линии в onSelectRow события JQ сетки она работала.

$ ('. Loading').показать();

0

его беспокоит $ ('div.loading'). Show(); Это также полезно даже другие компоненты

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

Как отметил @Oleg есть много хороших возможностей в процессе разработки Ajax базовые приложения. С его помощью вы можете блокировать весь интерфейс или конкретный элемент под названием element Block

Для вас jqGrid может поставить сетку в DIV (sampleGrid), а затем блокировать сетку, как:

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

Простой, чтобы показать :

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

Затем, чтобы скрыть его снова

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

Обратите внимание, что при отправке в старый поток, который имеет несколько других ответов, особенно когда один из них принимается. Вам нужно объяснить, почему ваш ответ лучше всех существующих. – APC

+0

Спасибо! этот ответ лучше других, потому что (1) он очень короткий, и (2) он обрабатывает случай с двумя сетками на одной странице. –