0

我有一个使用简单子网格的 jqGrid (4.1.1)。当添加记录以查看子网格时,会弹出一个与我的正常加载UI不同的加载UI。

我当前的配置是使用loadui: none,并且在beforeRequest事件中我展示了我自己的加载器。

如果我在subGridBeforeExpand事件中使用我的自定义消息,它会显示我的消息以及默认消息。加载完成后,我也看不到将 div 隐藏在哪里。subGridRowExpanded似乎不是正确的地方。

简而言之:

  1. 是否有 jqGrid 设置来隐藏子网格 loadui,或者我必须滚动自己的 javascript 来隐藏它?
  2. 我可以挂钩哪些事件以确保子网格已加载,以便我可以关闭加载程序?

提前致谢!

4

1 回答 1

1

如果您查看子网格的代码,您可以在这里找到加载 div 将显示的位置,就像

$("#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"仅在主网格中使用。您如何从上面的代码中看到loaduiother as "enable"or的任何值"block"(如您使用的未知“none”值)将被解释为loadui: "disable".

在我看来,这是 subgrid 中的一个错误

作为解决方法,我建议您在创建 jqGrid 后删除加载 div。例如,如果您的网格的表格元素有id="list",那么下一行:

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

只会删除 div,您将永远不会在主网格和子网格中看到它。

根据评论更新:好的!现在我明白你的问题了。我虽然在那之前你用过datatype: 'local'。如果使用一些远程数据类型和blockUI插件,您可以执行以下操作。ajaxjqGrid 当前对子网格使用的调用可以在这里看到。它使用complete事件,所以jQuery.ajaxsuccess的和error事件现在是免费的。因此,您可以使用事件来调用或关闭加载覆盖的方法。您可以使用jqGrid的 ajaxSubgridOptions 参数.unblock()$.unblockUI()

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

如果它不能解决您的问题,您应该在您的问题中包含解释您如何使用blockUI插件的代码片段,我将通过插入解除阻塞方法的调用来修改代码。

于 2011-08-01T15:48:51.680 回答