我正在做一些花费时间的过程,所以我希望能够显示一个掩码,我使用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);
它运作得很好,但我想知道这是否是正确的方法?
如果我删除延迟标记,则掩码似乎永远不会显示,但该过程确实有效。
提前致谢
答案 0 :(得分:2)
假设您的“进程”是某种本地顺序过程,您上面所说的几乎是正确的。如果您的代码正在运行繁忙的循环,它将不会放弃对UI“线程”的控制,以便浏览器重绘。
所以你不会在这里看到面具;
mask();
busyLoop();
unmask();
但如果你这样做:
mask();
setTimeout(function() {
busyLoop();
unmask();
}, 1);
它可以让你在进入你的东西之前给浏览器画画时间。