JqGrid триггер "Загрузка..." наложения
Кто-нибудь знает, как запускать накладку jqGrid "Загрузка...", которая отображается при загрузке сетки? Я знаю, что я могу использовать плагин jquery без особых усилий, но я бы хотел, чтобы внешний вид моего приложения соответствовал тому, что уже используется в jqGrid.
Закрытие, которое я нашел, это:
jqGrid отображение по умолчанию" загрузка " при обновлении таблицы/пользовательского обновления
Ответы
Ответ 1
Если вы ищете что-то вроде функции DisplayLoadingMessage()
. Это не существует в jqGrid. Вы можете установить параметр loadui jqGrid для включения (по умолчанию), отключения или блокировки. Я лично предпочитаю блок. (см. http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options). Но я думаю, что это не то, что вы хотели.
Единственное, что вы можете сделать, если вам нравится сообщение "Загрузка..." из jqGrid, - это сделать то же самое. Я объясню здесь, что делает jqGrid для отображения этого сообщения: будут созданы два скрытых div. Если у вас есть сетка с id = list, эти divs будут выглядеть следующим образом:
<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. Однако, если опция 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 лучше для ваших целей.
Ответ 2
Я использую
$('.loading').show();
$('.loading').hide();
Он отлично работает, не создавая никаких новых div
Ответ 3
Простой, чтобы показать его:
$("#myGrid").closest(".ui-jqgrid").find('.loading').show();
Затем, чтобы скрыть его снова
$("#myGrid").closest(".ui-jqgrid").find('.loading').hide();
Ответ 4
Я просто разместил ниже строки в событии onSelectRow сетки JQ, в котором он работал.
$( 'загрузка.') Шоу();.
Ответ 5
Стиль для переопределения - [.ui-jqgrid.loading].
Ответ 6
Вы можете вызвать $( "# load _" ). show() и .hide(), где находится идентификатор вашей сетки.
Ответ 7
его беспокоит $('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');
}
}
});
Ответ 8
Как упоминалось в @Oleg jQuery Block UI, есть много хороших функций при разработке базовых приложений ajax. С его помощью вы можете заблокировать весь пользовательский интерфейс или определенный элемент элемент 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();
}
}
});
Ответ 9
Если вы хотите не блокировать и не использовать встроенный вызов ajax для получения данных
Тип данных = "локальный"
Вы можете расширить функции jqgrid следующим образом:
$.jgrid.extend({
// Loading function
loading: function (show) {
if (show === undefined) {
show = true;
}
// All elements of the jQuery object
this.each(function () {
if (!this.grid) return;
// Find the main parent container at level 4
// and display the loading element
$(this).parents().eq(3).find(".loading").toggle(show);
});
return show;
}
});
а потом простой звонок
$("#myGrid").loading();
или же
$("#myGrid").loading(true);
показать загрузку на всех ваших сетках (конечно, меняя идентификатор сетки на сетку) или
$("#myGrid").loading(false);
скрыть загрузочный элемент, ориентируясь на конкретную сетку, если у вас есть несколько сеток на одной странице