2014-08-28 53 views
0

我有一個大集合的Web應用程序。所以我的用戶得到一個文本框來過濾集合。 但每次用戶輸入一個字母時,都會啓動過濾器操作。有些時候這很慢。GWT Fire ValueChangeEvent特定時間後

所以我只想在用戶停止鍵入一秒鐘時才能獲得值更改事件。

我試着這樣說:

@Override 
    public void onValueChange(ValueChangeEvent<String> event) 
    { 
    Timer t = new Timer() 
    { 
     @Override 
     public void run() 
     { 
     addChangeHandler(new ChangeHandler() 
     { 
      @Override 
      public void onChange(ChangeEvent event1) 
      { 
      ValueChangeEvent.fire(TextBoxPSG.this, getValue()); 
      } 
     }); 
     } 
    }; 
    t.schedule(15000); 
    } 

但是,這是行不通的。 也許有人有一個想法或相同的問題。

在此先感謝。

回答

0

請勿使用ValueChangeEvent。使用KeyUpEvent。

private static Timer timer = new Timer() { 
    @Override 
    public void run() { 
     // do you filter work; 
    } 
}; 

... 
myTextBox.addKeyUpHandler(new KeyUpHandler() { 

    @Override 
    public void onKeyUp(KeyUpEvent event) { 
     if (timer.isRunning()) { 
      timer.cancel(); 
     } 
     timer.schedule(1000); 
    } 

}); 
+0

這很有幫助,但我們不會在每次需要過濾器時都執行此操作。在文本框中直接做這件事會很好。所以只能讓文本框在時間之後觸發changeEvent或其他事情。 – dominic 2014-08-29 05:16:22

+0

然後,您將需要繼承一個TextBox,基本上在TextBox中移動相同的代碼。如果你只在幾個地方需要它,那麼我的解決方案是一個更好的選擇。 – 2014-08-29 11:28:23

+0

我發現了另一個不錯的解決方案。我寫我自己的事件。然後在運行方法中,我發起這個事件。所以對這個事件感興趣的每個人都可以得到它。 – dominic 2014-09-01 05:41:18