2014-09-09 3 views
1

Я обнаружил, что KeyUpHandler кажется наиболее динамичным обработчиком для TextBox, если я хочу мгновенное обновление после ввода чего-либо. Однако, учитывая, что значения могут измениться, если кто-то не нажал клавишу, необходимо использовать ValueChangeHandler, который, к сожалению, когда используется один, не так динамичен и не запускается каждый раз, когда вы изменяете содержимое TextBox с помощью клавиатуры.Как объединить KeyUpHandler и ValueChangeHandler в GWT?

Сейчас у меня есть метод, как это, чтобы добавить оба обработчика в TextBox, но я предполагаю, что это не самый лучший способ, чтобы добавить несколько обработчиков, как это и, вероятно, не очень производительным либо:

private void addInputValueChangeHandlers(TextBox inputTextBox) { 
    inputTextBox.addKeyUpHandler(new KeyUpHandler() { 

     @Override 
     public void onKeyUp(KeyUpEvent event) { 
      updateResult(); 
     } 
    }); 

    inputTextBox.addValueChangeHandler(new ValueChangeHandler<String>() { 

     @Override 
     public void onValueChange(ValueChangeEvent<String> event) { 
      updateResult(); 
     } 
    }); 
} 

Так есть способ объединить их или обработчик, который даст тот же эффект, что и этот?

ответ

0

Override onBrowseEvent или использовать обработчик NativePreview для выполнения своей работы.

0

Я думаю, вы должны обнаружить себя, если что-то изменилось в методе onKeyUp делать что-то вроде:

private void addInputValueChangeHandlers(TextBox inputTextBox) { 
    inputTextBox.addKeyUpHandler(new KeyUpHandler() { 

     @Override 
     public void onKeyUp(KeyUpEvent event) { 
      if(!inputTextBox.getValue().equals(previousValue)){ 
       updateResult(); 
      } 
      previousValue = inputTextBox.getValue(); 
     } 
    }); 
} 

Где previousValue является атрибутом вашего класса, начальное значение равно null.

+0

Да, но если значение в TextBox будет изменено без использования ключей, это не будет называться, я думаю. И именно поэтому я помещаю обоих обработчиков в TextBox –