1

我正在使用 GWT 2.4。我有一个 Suggestbox,我需要在某些情况下隐藏建议列表。上下文如下。

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

display.getSuggestBox().hideSuggestionList();

阅读 hideSuggestionList() 的 javadoc,据说“已弃用。请改用 DefaultSuggestionDisplay.hideSuggestions()”。我不知道如何使用 DefaultSuggestionDisplay,我正在使用 SuggestBox 和“MultiWordSuggestOracle”。

谢谢你的协助!!

4

3 回答 3

3

您可以做的只是在用户单击编辑时将 SuggestionBox 与普通 TextBox 交换,并在编辑关闭时返回。还因为如果您要隐藏建议列表,它仍然会从服务器查询。通过交换小部件,您不必关心副作用。SuggestionBox 本身也使用一个 TextBox,因此对于用户来说它是不可见的小部件已更改。

于 2012-03-14T09:20:35.647 回答
1

如果您不使用自己的SuggestionDisplay,那么这应该只是工作™:

((DefaultSuggestionDisplay) suggestBox.getSuggestionDisplay()).hideSuggestions();
于 2013-08-29T05:44:56.893 回答
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。

于 2012-03-16T12:42:41.320 回答