我在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?
如果上述方法不是您所需要的,那么您可以实现替代阻止.解决方案将取决于jqGrid的版本以及您使用的jqGrid的分支(free jqGrid,商业Guriddo jqGrid JS或版本中的旧jqGrid< = 4.7).您写道,您使用的是复古版本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的分支,我在制作主叉商用并将其重命名为Guriddo jqGrid JS后开发(见the old post和the price list).免费的jqGrid可以使用与您当前使用的旧版本4.4.4相同的许可协议免费使用.
如果你要使用新版本的jqGrid,那么推荐的方法是覆盖jqGrid使用的progressBar方法
$.jgrid.extend({
progressBar: function (options) {
if (options.method === "show") {
//alert("start blocking");
UIBlocker.blockScreen();
} else {
//alert("stop blocking");
UIBlocker.unblockScreen();
}
}
});