【问题标题】:How to hide suggestions in GWT SuggestBox?如何在 GWT SuggestBox 中隐藏建议?
【发布时间】:2012-03-14 04:16:34
【问题描述】:

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

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

display.getSuggestBox().hideSuggestionList();

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

谢谢你帮助我!!

【问题讨论】:

    标签: gwt suggestbox


    【解决方案1】:

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

    【讨论】:

    • 嗨Hibrand,非常感谢您的解决方案。它像梦一样工作。而且变化非常少。我仍然认为这是一种“解决方法”。应该有一些方法来禁用/启用显示建议列表。 :)
    【解决方案2】:

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

    ((DefaultSuggestionDisplay) suggestBox.getSuggestionDisplay()).hideSuggestions();
    

    【讨论】:

      【解决方案3】:

      解决办法

      我的入口点类

      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。

      【讨论】:

      • 嗨,非常感谢您抽出宝贵的时间制定解决方案。我尝试复制粘贴您的代码,但我收到一些 UiBinder 错误,如下所示“模板文件 SuggestBoxWidget.ui.xml 是丢失(预计在 com/ctl/qportal/dbutilweb/client/view)”。我还没有使用 UiBinder...我会在有时间的时候尝试实现它。现在我会接受@Hilbrand Bouwkamp 的建议。即用TextBox替换SuggestBox。(我真的很着急:))
      • 您不必使用 UiBinder。只需将 TextBox 引用到 SuggestBox 构造函数,即可创建一个 TextBox 并动态地将其替换为 Suggest Box。然后您可以使用 DefaultSuggestionDisplay 类来解决隐藏建议...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多