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

时间:2011-08-01 14:47:01

标签: javascript jquery jquery-ui jqgrid jquery-blockui

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

我目前的配置是使用loadui: none,在beforeRequest事件中我会显示自己的加载程序。

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

简而言之:

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

1 个答案:

答案 0 :(得分:1)

如果您查看子网格的代码,您可以找到here加载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"(如您使用的未知“无”值)将被解释为loadui: "disable"

在我看来这是子网格中的错误

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

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

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

根据评论

更新:好的!现在我明白你的问题。我之前使用datatype: 'local'。如果使用某些远程数据类型和blockUI插件,您可以执行以下操作。 jqGrid用于子网格的ajax调用目前您可以看到here。它使用complete事件,因此jQuery.ajaxsuccesserror事件现在免费。因此,您可以使用这些事件调用.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插件的代码片段,我将通过插入解锁方法的调用来修改代码。