2012-03-23 23 views
8

擁有以下szenario:模糊文本框(輸入)將文本寫入到我的狀態框(在某些情況下),然後單擊按鈕也會將文本寫入狀態框。GWT:如何將事件放入隊列(相當於Swing invokeLater())?

現在當單擊該按鈕時,如果它被聚焦,它將模糊我的文本框,並且會導致狀態框閃爍,因爲blurHandler會首先寫入其結果,然後是clickHandler。 正如我想讓clickHandler出現的結果是我的想法是讓blurHandler在隊列的末尾放置一個事件,它檢查clickHandler是否已經寫入結果。

在Swing中,我會嘗試SwingUtilities .invokeLater(Runnable)。 GWT中的等價物據說是Scheduler,但那些延遲或最終命令似乎總是在當前事件之後和下一個之前運行。 到目前爲止,我使用Scheduler.scheduleFixedDelay延遲100ms,並希望它在每個瀏覽器中的clickHanlder之後。 查看類似的problem的回答。

我認爲必須有更好的解決方案。 如何真的添加一個事件到隊列的末尾或者由於HTML的限制而不可能?

+0

請注意,您的問題都沒有*做HTML,但是有不同的瀏覽器的JavaScript引擎。調度程序將事件添加到隊列末尾,但瀏覽器可能會在事件完成後生成下一個事件。這種效果是否出現在所有瀏覽器中? – 2012-03-23 08:21:11

+0

是的效果出現在所有瀏覽器 – 2012-03-23 08:46:35

+0

我不確定這是否是最好的解決方案,但在textBox模糊你可能不得不看看焦點是否轉到特定的按鈕。它看起來不太優雅。也許這個鏈接將有所幫助:http://stackoverflow.com/questions/7096120/how-to-determine-where-focus-went – nogridbag 2012-03-23 14:56:32

回答

4

嘗試:

Scheduler.get().scheduleDeferred(new Command() { 

         @Override 

         public void execute() { 
           ....... 
         } 
       }); 

Class Scheduler

+0

我已經試過這個。在blurHandler中執行此操作仍然會使命令在clickHandler之前執行。我在FF,Chrome,Safari瀏覽器的開發和生產模式中嘗試過這種方式 - 所有瀏覽器都具有相同的閃爍效果。 – 2012-03-23 08:46:00