Extjs 必须使用DelayedTask,否则LoadMask不会';不显示
我正在做一些需要时间的过程,所以我希望能够显示一个掩码,我使用LoadMask。问题是我想要运行的代码似乎运行得太快了,我认为它阻塞了UI以显示掩码。这个过程大约需要4秒钟,因此我知道掩码没有同时启用和禁用 我解决这个问题的方法是使用一个延迟的任务,但这感觉有点像一种代码气味 我可以换一种方式吗 这是我的Extjs 必须使用DelayedTask,否则LoadMask不会';不显示,extjs,extjs4,extjs4.1,extjs4.2,extjs5,Extjs,Extjs4,Extjs4.1,Extjs4.2,Extjs5,我正在做一些需要时间的过程,所以我希望能够显示一个掩码,我使用LoadMask。问题是我想要运行的代码似乎运行得太快了,我认为它阻塞了UI以显示掩码。这个过程大约需要4秒钟,因此我知道掩码没有同时启用和禁用 我解决这个问题的方法是使用一个延迟的任务,但这感觉有点像一种代码气味 我可以换一种方式吗 这是我的 var myMask = new Ext.LoadMask(win, {}); myMask.show(); var task = new Ext.util.Dela
var myMask = new Ext.LoadMask(win, {});
myMask.show();
var task = new Ext.util.DelayedTask(function () {
....... // DO MY stuff and eventually do a myMask.hide()
task.delay(400);
它工作得很好,但我想知道这是否是正确的方法
如果我移除延迟标记,则掩码似乎永远不会显示,但该过程确实有效。假设您的“过程”是某种局部顺序过程,您上面所说的几乎是正确的。如果您的代码正在运行一个繁忙的循环,它不会将控制权让给UI“线程”,以便浏览器重新绘制
所以你不会在这里看到面具
mask();
busyLoop();
unmask();
但如果你这样做了:
mask();
setTimeout(function() {
busyLoop();
unmask();
}, 1);
它让浏览器有时间在你进入你的东西之前画图。你能为你的任务添加代码吗,包括myMask.hide()?你的4秒任务是什么?REST方法调用?我将对这些进程使用公共回调,全局计数器等于进程数。在这个计数器中。计数器为0时,立即隐藏遮罩。在ExtJS6中,对于这些目的有一些承诺,但我可以看到,这不是你的情况。谢谢大家的评论。所以现在,在升级到更高版本的Extjs之前,我似乎一直在做正确的事情