JqGrid триггер "Загрузка..." наложения

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

Закрытие, которое я нашел, это:

jqGrid отображение по умолчанию" загрузка " при обновлении таблицы/пользовательского обновления

  • n8

Ответы

Ответ 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); 

скрыть загрузочный элемент, ориентируясь на конкретную сетку, если у вас есть несколько сеток на одной странице