Как скрыть предложения в GWT SuggestBox? - PullRequest
1 голос
/ 14 марта 2012

Я использую GWT 2.4. У меня есть Suggestbox, и у меня есть требование, чтобы скрыть список предложений при определенных случаях. Контекст как ниже.

После того, как пользователь выбирает предложение из списка предложений, я заполняю два других поля текстового поля, значения которых соответствуют выбору. Например, предположим, что поле предложить содержит имена пользователей, а пользователь выбирает имя пользователя из предложений, а затем два других поля, например, адрес пользователя и адрес электронной почты, заполняются в двух других текстовых полях. Эти два поля только для чтения сейчас. Затем пользователь нажимает кнопку «Изменить». Теперь пользователь может редактировать либо имя пользователя (т.е. редактировать в окне предложения), адрес пользователя и адрес электронной почты. Не имеет смысла снова показывать предложения, когда пользователь редактирует имя пользователя, так как пользователь уже выбрал пользователя и решил отредактировать его. Короче говоря, мой OfferBox должен вести себя как обычное текстовое поле. Я попробовал следующий код (я знаю, что hideSuggestionList () устарел), но он не работает.

display.getSuggestBox().hideSuggestionList();

При чтении javadoc для hideSuggestionList () говорится, что «устарело. Вместо этого используйте DefaultSuggestionDisplay.hideSuggestions ()». Я не знаю, как использовать DefaultSuggestionDisplay, и я использую SuggestBox с 'MultiWordSuggestOracle'.

Спасибо за помощь !!

Ответы [ 3 ]

3 голосов
/ 14 марта 2012

То, что вы можете сделать, это просто поменять OffertionBox с обычным TextBox, когда пользователь нажимает кнопку редактирования, и обратно, когда редактирование закрыто.Кроме того, потому что, если вы хотите скрыть список предложений, он все еще запрашивается с сервера.Меняя местами виджет, вам не нужно заботиться о побочных эффектах.Сам по себе SuggestionBox также использует TextBox, поэтому для пользователя он не виден, виджет изменился.

1 голос
/ 29 августа 2013

Если вы не используете свой собственный SuggestionDisplay, то это должно быть Just Work ™:

((DefaultSuggestionDisplay) suggestBox.getSuggestionDisplay()).hideSuggestions();
1 голос
/ 16 марта 2012

Вот решение

Мой класс точки входа

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+"");
        }
    }

}

На самом деле вы должны создать SuggestBox с 3 параметрами для конструктора.

...