是否可以在jqGrid中更改子网格的负载?

Is it possible to change the loadui for a subgrid in jqGrid?

本文关键字:网格 负载 jqGrid 是否      更新时间:2023-09-26

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

我当前的配置是使用loadui: none,在beforeRequest事件上我显示我自己的加载器。

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

简而言之:

    是否有一个jqGrid设置来隐藏子网格负载,或者我必须滚动我自己的javascript来隐藏它?
  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"将只在主网格中使用。从上面的代码可以看出,loadui的任何值,如"enable""block"(如您使用的未知"none"值)将被解释为loadui: "disable"

在我看来这是子网格中的一个bug。

作为解决方案,我建议您在创建jqGrid

后,只需删除加载div。例如,如果网格的table元素具有id="list",则下一行:
$("div#load_list").remove();

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

根据注释更新: OK!现在我明白你的问题了。我以为你之前用的是datatype: 'local'。在使用一些远程数据类型和blockUI插件的情况下,您可以执行以下操作。当前jqGrid对子网格使用的ajax调用可以在这里看到。它使用了complete事件,所以使用了jQuery的successerror事件。Ajax现在是免费的。因此,您可以使用事件来调用.unblock()$.unblockUI()方法,这将关闭加载覆盖。你可以使用jqGrid的ajaxSubgridOptions参数

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

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