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

时间:2015-10-09 07:25:41

标签: extjs extjs4 extjs4.1 extjs4.2 extjs5

我正在做一些花费时间的过程,所以我希望能够显示一个掩码,我使用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);

它运作得很好,但我想知道这是否是正确的方法?

如果我删除延迟标记,则掩码似乎永远不会显示,但该过程确实有效。

提前致谢

1 个答案:

答案 0 :(得分:2)

假设您的“进程”是某种本地顺序过程,您上面所说的几乎是正确的。如果您的代码正在运行繁忙的循环,它将不会放弃对UI“线程”的控制,以便浏览器重绘。

所以你不会在这里看到面具;

mask();
busyLoop();
unmask();

但如果你这样做:

mask();
setTimeout(function() {
    busyLoop();
    unmask();
}, 1);

它可以让你在进入你的东西之前给浏览器画画时间。