2013-10-25 4 views
0

Мне нужно добавить обработчик, который запускается, когда выбран CLICKED, который затем проверяет значение. Текущая функциональность проверяется (через textInput при размытии) прямо перед тем, как все значение будет записано из подсказки, тем самым не пройдя проверку (когда это необходимо).GWT- Неподходящий слушатель не работает

Вот что я пытался ниже, где я реализовать suggestbox на странице TextInput:

public void onModuleLoad() { 

SuggestBox box = new SuggestBox(createListOracle(),myTextBox()); 

box.addSelectionHandler(new SelectionHandler<Suggestion>() { 

    @Override 
    public void onSelection(SelectionEvent<Suggestion> event) { 
     Validate(); 
    } 
}); 

другое решение может быть, чтобы вставить бегового на фокус, когда suggestbox выбран из, что бы сделать то же самое для меня.

Проблема заключается в том, что обработчик никогда не стреляет. Брейк-точка никогда не достигается.

+0

Этот вопрос на самом деле вызваны ошибка в подсказке, в соответствии с: http://codinginthetrenches.com/2012/catching-value-change-events-from-the-gwt-suggestbox/ – TheJavaBeast

+0

Однако моя проблема заключается в решении проблемы, я не могу получить SelectionHandler для работы в качестве решения говорит, что он должен. – TheJavaBeast

ответ

4

Тогда взгляните на ValueBoxBase.

Вы пройдете свой собственный экземпляр конструктора SuggestBox

общественного SuggestBox (SuggestOracle оракул, ValueBoxBase коробка)

TextBox является подклассом ValueBoxBase, и у него есть ClickListeners поэтому у вас есть выбор между :

  1. Создайте свой TextBox снаружи и добавить его слушателей, а затем передать его в конструктор SuggestBox (SuggestOracle оракул, ValueBoxBase коробка)
  2. Overridi нг SuggestBox и делает конструктор принять «лучше» ValueBoxBase (например, TextBox) и добавить методы слушателя к вашему implmentation

я попробовал этот пример, он работает

 TextBox suggestTextBox = new TextBox(); 
    suggestTextBox.addClickHandler(new ClickHandler() { 

     @Override 
     public void onClick(ClickEvent event) { 
      Window.alert("tada"); 
     } 
    }); 
    SuggestOracle oracle = new MultiWordSuggestOracle(" ,"); 

    final SuggestBox nameField = new SuggestBox(oracle, suggestTextBox); 
+0

Благодарим вас за помощь! Но я не уверен, что понимаю, что ты предлагаешь мне делать. Таким образом, моя иерархия файлов - это виджетов -> TextInput -> Содержит подсказку ... когда вы говорите «создайте свое текстовое поле снаружи», вы хотите отделить suggestBox от TextInput? – TheJavaBeast

+0

Кроме того, вы не знаете, что может заставить обработчик onSelection не работать? Это похоже на популярное решение моей проблемы, и если бы я мог определить, что может заставить его не запускать, возможно, это решение было бы проще? Я замечаю, что обработчик изменений - это то, что срабатывает, но оно принимает старое значение, а когда новое значение «полностью» выбрано, в отладчике ничего не происходит. – TheJavaBeast

+0

Попробуйте образец, который я только что добавил в ответ. он работает –

0

Вы также можете использовать расширенный предложить окно https://code.google.com/p/advanced-suggest-select-box/

, который дает вам контроль над событиями: вы можете переопределить valueSelected() или valueTyped() и решить, нужно ли проверять его или нет.

Демонстрационная версия Lib здесь http://1vu-widgets.appspot.com/IntoGwt.html

+0

Хм, спасибо за совет, но я заглянул в него, и я думаю, что это может заставлять мои ресурсы начинать с нуля. Все, что мне нужно, - это предложить предложениюBox для прослушивания кликов. Я не понимаю, почему это так сложно, где-то должно быть простое решение. – TheJavaBeast

Смежные вопросы