如何隐藏GWT SuggestBox中的建议?
我正在使用GWT 2.4。我有一个Suggestbox,在某些情况下,我有要求隐藏建议列表。上下文如下。如何隐藏GWT SuggestBox中的建议?
用户从建议列表中选择一个建议后,我填充两个其他文本框字段,其值与选择对应。例如,假设promptbox包含用户名,用户从建议中选择一个用户名,然后选择其他两个字段,比如说用户地址和电子邮件被填充到另外两个文本框中。这两个字段现在是只读。然后用户点击“编辑”按钮。现在用户可以编辑用户名(即在建议框中编辑),用户地址和电子邮件。在用户编辑用户名时再次显示建议是没有意义的,因为用户已经选择了用户并决定对其进行编辑。简而言之,我的SuggesBox应该像普通的文本框一样工作。我试过下面的代码,(我知道hideSuggestionList()被弃用),但它不工作。
display.getSuggestBox().hideSuggestionList();
阅读hideSuggestionList的Javadoc()据说, “已过时。使用DefaultSuggestionDisplay.hideSuggestions(),而不是”。我不知道如何使用DefaultSuggestionDisplay,并且我正在使用带有“MultiWordSuggestOracle”的SuggestBox。
感谢您的帮助!
你可以做的只是在用户点击编辑时将SuggestionBox与普通的TextBox交换,而在编辑关闭时返回。另外,因为如果您将隐藏建议列表,它仍然从服务器查询。通过交换小部件,您不必关心副作用。 SuggestionBox本身也使用一个TextBox,因此对于用户来说它不可见,该小部件已经改变。
下面是解
我的入口点类
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();
}
}
这里是我的Widget
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。
嗨非常感谢您花费您的时间和解决方案..我尝试复制粘贴您的代码,但我得到一些UiBinder错误,如下所示“模板文件SuggestBoxWidget.ui.xml丢失(预计在COM/CTL/qportal/dbutilweb /客户端/视图)”。我还没有使用过UiBinder ...我会尽力在我有一些时间的时候实现它。现在我会和@Hilbrand Bouwkamp的建议一起去。即用TextBox替换SuggestBox。(我真的很着急:)) – hashcoder 2012-03-17 19:11:30
你不必使用UiBinder。只需创建一个文本框,并通过将TextBox引用到SuggestBox构造函数来动态地将其替换为Suggest Box。然后,您可以使用DefaultSuggestionDisplay类来解决隐藏的建议... – 2012-03-19 04:47:45
如果你不使用你自己的SuggestionDisplay
,那么这应该只是工作™:
((DefaultSuggestionDisplay) suggestBox.getSuggestionDisplay()).hideSuggestions();
嗨Hibrand,非常感谢你的解决方案。它像梦一样工作。而且变化很小。我仍然认为这是一种'解决'的问题。应该有一些方法来禁用/启用显示建议列表。 :) – hashcoder 2012-03-17 19:15:03