2013-10-25 241 views
0

我需要添加一个处理程序,火灾时,选择点击哪些然后将验证的值。当前的功能正在验证(通过模糊上的textInput),直到从提示框记录整个值之前,因此没有通过验证(当它应该)。GWT- Suggestbox监听器不工作

这里是我试过右下方其中i实现了TextInput页的suggestbox:

public void onModuleLoad() { 

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

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

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

另一个解决办法是插上时suggestbox选自焦点的骏马,这将完成同样的事情为了我。

问题是处理程序从不开火。断点永远不会到达。

+0

这个问题实际上是由引起在Suggestbox,一个bug根据:http://codinginthetrenches.com/2012/catching-value-change-events-from-the-gwt-suggestbox/ – TheJavaBeast

+0

但我的问题是解决了修复,我不能让SelectionHandler像解决方案所说的那样工作。 – TheJavaBeast

回答

4

然后看看ValueBoxBase。

您将自己的实例传递给的构造函数的SuggestBox

公共SuggestBox(SuggestOracle甲骨文,ValueBoxBase盒)

文本框是ValueBoxBase的一个子类,等你的选择有ClickListeners :

  1. 之外创建文本框,并将其添加监听器,然后将它传递给构造SuggestBox(SuggestOracle甲骨文,ValueBoxBase盒)
  2. Overridi NG SuggestBox,使构造采取“更好的” ValueBoxBase(例如文本框),并侦听器方法添加到您的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

谢谢你的帮助!但我不知道我明白你告诉我要做什么。所以我的文件层次结构是Widget - > TextInput - > Contains Suggestbox ...当你说“在外部创建你的文本框”时,你的意思是将promptBox与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

嗯,谢谢你的建议,但我研究这个,我认为这可能会推我的资源从头开始。我需要的仅仅是为了提示点击侦听器。我不明白为什么这么难,必须有一个简单的解决方案。 – TheJavaBeast