如何在GWT SuggestBox中隐藏建议?

时间:2012-03-14 04:16:34

标签: gwt suggestbox

我正在使用GWT 2.4。我有一个Suggestbox,我要求在某些情况下隐藏建议清单。具体情况如下。

用户从建议列表中选择建议后,我将填充另外两个文本框字段,其值与选择对应。例如,假设建议框包含用户名,并且用户从建议中选择用户名,则用户地址和电子邮件等其他两个字段填充在另外两个文本框中。这两个字段现在是只读。然后用户点击“编辑”按钮。现在,用户可以编辑用户名(即在建议框中编辑),用户地址和电子邮件。当用户编辑用户名时再次显示建议没有意义,因为用户已经选择了用户并决定对其进行编辑。简而言之,我的SuggesBox应该像普通文本框一样工作。我尝试了下面的代码,(我知道不推荐使用hideSuggestionList()),但它无效。

display.getSuggestBox().hideSuggestionList();

读取hideSuggestionList()的javadoc,据说“不推荐使用Default.SuggestionDisplay.hideSuggestions()”。我不知道如何使用DefaultSuggestionDisplay,我正在使用带有'MultiWordSuggestOracle'的SuggestBox。

感谢您帮助我!!

3 个答案:

答案 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();