1

私はGWT2.4を使用しています。提案ボックスがあり、特定の場合に提案リストを非表示にする必要があります。コンテキストは以下のとおりです。

ユーザーが提案リストから提案を選択した後、選択に対応する値を使用して、他の2つのテキストボックスフィールドに入力します。たとえば、suggestboxにユーザー名が含まれていて、ユーザーが提案からユーザー名を選択すると、他の2つのフィールド、たとえばユーザーアドレスと電子メールが他の2つのテキストボックスに入力されます。これらの2つのフィールドは現在読み取り専用です。次に、ユーザーは[編集]ボタンをクリックします。これで、ユーザーはユーザー名(つまり、提案ボックスで編集)、ユーザーアドレス、および電子メールのいずれかを編集できます。ユーザーがすでにユーザーを選択して編集することを決定しているため、ユーザーがユーザー名を編集しているときに提案を再度表示することは意味がありません。一言で言えば、私のSuggesBoxは通常のテキストボックスとして動作するはずです。次のコードを試しましたが(hideSuggestionList()が非推奨になっていることはわかっています)、機能しません。

display.getSuggestBox().hideSuggestionList();

HideSuggestionList()のjavadocを読むと、「非推奨です。代わりにDefaultSuggestionDisplay.hideSuggestions()を使用してください」と言われています。DefaultSuggestionDisplayの使用方法がわかりません。また、「MultiWordSuggestOracle」でSuggestBoxを使用しています。

手伝ってくれてありがとう!

4

3 に答える 3

3

できることは、ユーザーが[編集]をクリックしたときにSuggestionBoxを通常のTextBoxと交換し、編集を閉じたときに元に戻すことです。また、提案リストを非表示にした場合でも、サーバーからクエリが実行されるためです。ウィジェットを交換することで、副作用を気にする必要がなくなります。SuggestionBox自体もTextBoxを使用しているため、ウィジェットが変更されていることはユーザーには表示されません。

于 2012-03-14T09:20:35.647 に答える
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 に答える
1

独自のものを使用しない場合SuggestionDisplay、これはJustWork™である必要が あります。

((DefaultSuggestionDisplay) suggestBox.getSuggestionDisplay()).hideSuggestions();
于 2013-08-29T05:44:56.893 に答える