我已经用Java脚本编写了阻止屏幕和取消阻止屏幕的功能。阻止屏幕是指阻止屏幕,使用户无法单击任何内容(屏幕上出现加载程序图标)。

UIBlocker有两种方法。

1. UIBlocker.blockScreen()   // It blocks the screen.
2. UIBlocker.unblockScreen()  // It unblocks the screen.

现在,我需要在加载JQGrid时阻止屏幕。我想问我应该在哪里使用 UIBlocker.blockScreen() UIBlocker.unblockScreen()

根据我的发现, UIBlocker.blockScreen 应该在 beforeRequest 事件中使用,因为它会在请求数据之前触发。但是,还有一些其他事件会在加载前触发,例如 beforeProcessing,loadBeforeSend 。所以我仍然对此感到困惑。

第二件事是我应该在哪里使用 unblockScreen 。在 loadComplete gridComplete 吗?

在这里,我找到了jqgrid的执行顺序,
beforeRequest
loadBeforeSend
serializeGridData
loadError (if a error from the request occur - the event from steps 5 till 7 do not execute. If there is no error the event 4. does not execute and we continue to with the step 5.)
beforeProcessing
gridComplete
loadComplete

现在建议我,我应该在哪里使用 BlockScreen unblockScreen

最佳答案

您可以考虑首先使用loadui:“block”选项。这是在从服务器加载数据时阻止网格的标准方法。它不会阻塞整个屏幕(Web浏览器)。

如果上述方法不是您所需要的,则可以实现替代性阻塞。该解决方案将取决于jqGrid的版本以及您使用的jqGrid的分支(free jqGrid,商业Guriddo jqGrid JS或版本复古版 4.4.4。如果您没有那么多可能性,建议的方法是使用以下选项/回调:

loadui: "disable",  // remove the standard grid blocking
loadBeforeSend: function () {
    UIBlocker.blockScreen(); // block the grid/screen
    return true;    // allow request to the server
},
beforeProcessing: function () {
    UIBlocker.unblockScreen(); // unblock the grid/screen
    return true;    // process the server response
},
loadError: function (jqXHR, textStatus, errorThrown) {
    UIBlocker.unblockScreen(); // unblock the grid/screen

    // display the eror message in some way
    alert("HTTP status code: " + jqXHR.status + "\n" +
        "textStatus: " + textStatus + "\n" +
        "errorThrown: " + errorThrown);
}

我提醒您,版本4.4.4实际上是3.5年前发布的复古版本。您应该考虑将其升级到free jqGrid的当前版本(4.13.4)。它是jqGrid的fork,我在将主fork进行商业化并将其重命名为Guriddo jqGrid JS之后进行开发(请参阅the old postthe price list)。可以在与您当前使用的旧版本4.4.4相同的许可协议(protocol)下免费使用jqGrid。

如果要使用新版本的jqGrid,则建议的方法是覆盖jqGrid使用的progressBar方法
$.jgrid.extend({
    progressBar: function (options) {
        if (options.method === "show") {
            //alert("start blocking");
            UIBlocker.blockScreen();
        } else {
            //alert("stop blocking");
            UIBlocker.unblockScreen();
        }
    }
});

关于javascript - 加载Jqgrid之前和加载网格之后,在哪里应该使用方法阻止屏幕?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39324096/

10-13 05:06