Можно ли изменить loadui для подсетки в jqGrid? - PullRequest
0 голосов
/ 01 августа 2011

У меня есть jqGrid (4.1.1) с использованием простой подсетки.Когда для просмотра подсетки добавляется запись, появляется loadui, отличный от моего обычного.

Моя текущая конфигурация должна использовать loadui: none, а на событии beforeRequest я показываю свою собственнуюloader.

Если я использую свой собственный на событии subGridBeforeExpand, он показывает мое сообщение, а также сообщение по умолчанию.Я также не вижу, где бы я спрятал свой div, когда загрузка будет завершена.subGridRowExpanded не похоже на правильное место.

Короче говоря:

  1. Есть ли параметр jqGrid, чтобы скрыть подсеть loadui, или я должен свернуть свой собственныйjavascript, чтобы скрыть это?
  2. К каким событиям я могу подключиться, чтобы убедиться, что подсетка загружена, и я могу закрыть свой загрузчик?

Заранее спасибо!

1 Ответ

1 голос
/ 01 августа 2011

Если вы посмотрите в коде подсетки, вы можете найти здесь место, где будет отображаться загрузочный блок, как

$("#load_"+ts.p.id).show();

с другой стороны код для отображения стандартной (основной) сетки выглядит следующим образом (см. Здесь):

beginReq = function() {
    ts.grid.hDiv.loading = true;
    if(ts.p.hiddengrid) { return;}
    switch(ts.p.loadui) {
        case "disable":
            break;
        case "enable":
            $("#load_"+$.jgrid.jqID(ts.p.id)).show();
            break;
        case "block":
            $("#lui_"+$.jgrid.jqID(ts.p.id)).show();
            $("#load_"+$.jgrid.jqID(ts.p.id)).show();
            break;
    }
}

Таким образом, вы можете видеть, что настройка loadui: "disable" будет использоваться только в основной сетке . То, как вы можете видеть из приведенного выше кода любое значение loadui, например "enable" или "block" (например, неизвестное значение «none», которое вы используете), будет интерпретировано как loadui: "disable".

На мой взгляд это ошибка в подсетке .

В качестве обходного пути я предлагаю вам удалить загрузочный div после создания jqGrid . Если элемент таблицы вашей сетки имеет, например, id="list", то следующая строка:

$("div#load_list").remove();

просто удалит div, и вы никогда не увидите его ни в основной, ни в подсетке.

ОБНОВЛЕНО на основании комментариев: ОК! Теперь я понимаю вашу проблему. Я хоть до этого пользовался datatype: 'local'. В случае использования какого-либо удаленного типа данных и плагина blockUI вы можете сделать следующее. Вызов ajax, используемый jqGrid для подсетки, в настоящее время вы можете увидеть здесь . Он использует событие complete, поэтому события success и error jQuery.ajax теперь бесплатны. Таким образом, вы можете использовать события для вызова .unblock() или $.unblockUI() методов, которые закроют оверлей загрузки. Вы можете использовать ajaxSubgridOptions параметр jqGrid

$("#list").jqGrid({
    // options of grid of subgrid ...
    ajaxSubgridOptions {
        success: function () {
            $.unblockUI(); // or $("#list").unblock();
        },
        error: function () {
            $.unblockUI(); // or $("#list").unblock();
        }
    }
);

Если это не решит вашу проблему, вы должны включить в свой вопрос фрагмент кода, который объясняет, как вы используете плагин blockUI , и я изменю код, вставив вызовы методов разблокировки.

...