2015-10-09 49 views
0

我正在做幾個需要時間的進程,所以我希望能夠顯示一個掩碼,我使用LoadMask。問題是我想運行的代碼似乎運行得太快,我認爲是阻止用戶界面顯示掩碼。該過程大約需要4秒鐘,因此我知道該掩碼未被同時啓用和禁用。必須使用DelayedTask,否則LoadMask不會顯示

我解決這個問題的方式是使用延遲任務,但它有點像代碼味道。

其他人做這個不同的方式嗎?

這裏是我有什麼

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

你可以爲你的任務添加代碼,包括myMask.hide()嗎? – forgivenson

+0

你的4秒任務是什麼? REST方法調用? – Mattex83

+0

我會對這些進程使用通用回調,全局計數器等於進程數。在回調中減少這個計數器。只要計數器爲0,就隱藏掩碼。在ExtJs 6中有這些目的的承諾,但正如我所看到的,這不是你的情況。 – yorlin

回答

2

假設你的「過程」是某種地方一系列步驟,你上面說的是非常正確的。如果你的代碼正在運行一個繁忙的循環,它不會放棄對UI「線程」的控制權讓瀏覽器重繪。

所以你不會在這裏看到面具;

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

但是,如果你這樣做:

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

它給人的瀏覽器時你進入你的東西之前繪製。

相關問題