Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Extjs 必须使用DelayedTask,否则LoadMask不会';不显示_Extjs_Extjs4_Extjs4.1_Extjs4.2_Extjs5 - Fatal编程技术网

Extjs 必须使用DelayedTask,否则LoadMask不会';不显示

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

我正在做一些需要时间的过程,所以我希望能够显示一个掩码,我使用LoadMask。问题是我想要运行的代码似乎运行得太快了,我认为它阻塞了UI以显示掩码。这个过程大约需要4秒钟,因此我知道掩码没有同时启用和禁用

我解决这个问题的方法是使用一个延迟的任务,但这感觉有点像一种代码气味

我可以换一种方式吗

这是我的

    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之前,我似乎一直在做正确的事情