我正在使用GWT 2.4。我有一个Suggestbox,我要求在某些情况下隐藏建议清单。具体情况如下。
用户从建议列表中选择建议后,我将填充另外两个文本框字段,其值与选择对应。例如,假设建议框包含用户名,并且用户从建议中选择用户名,则用户地址和电子邮件等其他两个字段填充在另外两个文本框中。这两个字段现在是只读。然后用户点击“编辑”按钮。现在,用户可以编辑用户名(即在建议框中编辑),用户地址和电子邮件。当用户编辑用户名时再次显示建议没有意义,因为用户已经选择了用户并决定对其进行编辑。简而言之,我的SuggesBox应该像普通文本框一样工作。我尝试了下面的代码,(我知道不推荐使用hideSuggestionList()),但它无效。
display.getSuggestBox().hideSuggestionList();
读取hideSuggestionList()的javadoc,据说“不推荐使用Default.SuggestionDisplay.hideSuggestions()”。我不知道如何使用DefaultSuggestionDisplay,我正在使用带有'MultiWordSuggestOracle'的SuggestBox。
感谢您帮助我!!
答案 0 :(得分:3)
您可以做的只是在用户点击编辑时将SuggestionBox与普通TextBox交换,在关闭编辑时将其替换回来。另外,因为如果你隐藏建议列表,它仍然会从服务器查询。通过交换小部件,您不必关心副作用。 SuggestionBox本身也使用TextBox,因此对于用户来说,小部件已经改变是不可见的。
答案 1 :(得分:1)
这是解决方案
我的入门级课程
public class SuggestionEntryPoint implements EntryPoint {
@Override
public void onModuleLoad() {
SuggestBoxWidget suggestBoxWidget = new SuggestBoxWidget();
RootPanel rootPanel = RootPanel.get();
suggestBoxWidget.createOracle();
suggestBoxWidget.createWidgetAndShow(rootPanel);
rootPanel.add(suggestBoxWidget);
DOM.getElementById("loader").removeFromParent();
}
}
这是我的小工具
public class SuggestBoxWidget extends Composite {
private TextBox textSuggestBox = new TextBox();
private SuggestBox suggestBox = null;
DefaultSuggestionDisplay suggestionDisplay = new DefaultSuggestionDisplay();
MultiWordSuggestOracle suggestOracle = new MultiWordSuggestOracle();
private static SuggestBoxWidgetUiBinder uiBinder = GWT
.create(SuggestBoxWidgetUiBinder.class);
interface SuggestBoxWidgetUiBinder extends
UiBinder<Widget, SuggestBoxWidget> {
}
public SuggestBoxWidget() {
initWidget(uiBinder.createAndBindUi(this));
}
public void registerEvents(){
suggestBox.addKeyUpHandler(new KeyUpHandler() {
@Override
public void onKeyUp(KeyUpEvent event) {
if(suggestBox.getText().equalsIgnoreCase("1")){
suggestionDisplay.hideSuggestions();
}
}
});
}
public void createWidgetAndShow(HasWidgets container){
suggestBox = new SuggestBox(suggestOracle,textSuggestBox,suggestionDisplay);
container.clear();
container.add(suggestBox);
registerEvents();
}
public void createOracle(){
for(int i=1;i<=100;i++){
suggestOracle.add(i+"");
}
}
}
实际上你必须创建一个带有3个参数的SuggestBox给构造函数。
答案 2 :(得分:1)
如果您不使用自己的SuggestionDisplay
,那么这应该是Just Work™:
((DefaultSuggestionDisplay) suggestBox.getSuggestionDisplay()).hideSuggestions();