2012-03-14 3 views
1

私はGWT 2.4を使用しています。私はSuggestboxを持っており、ある場合には提案リストを隠す必要があります。文脈は以下の通りです。GWT SuggestBoxで提案を非表示にするにはどうすればよいですか?

ユーザーが提案リストから提案を選択すると、選択に対応する2つのテキストボックスフィールドが表示されます。たとえば、suggestboxにユーザー名が含まれていて、ユーザーが候補からユーザー名を選択し、次に2つの他のフィールドにユーザーアドレスと電子メールが入力されているとします。これらの2つのフィールドは、の読み取り専用です。ユーザーは「編集」ボタンをクリックします。ユーザーはユーザ名(つまり、提案ボックス内の編集)、ユーザアドレス、および電子メールのいずれかを編集できます。ユーザーが既にユーザーを選択して編集することを決めたため、ユーザーがユーザー名を編集しているときに再度提案を表示するのは意味がありません。つまり、SuggesBoxは通常のテキストボックスとして動作するはずです。私はhideSuggestionList()が廃止されていることを知っていますが、そのコードは動作しませんでした。

display.getSuggestBox().hideSuggestionList(); 

hideSuggestionListのJavadocを()は、 "非推奨。代わりDefaultSuggestionDisplay.hideSuggestions()を使用"、と言われている読書。私はDefaultSuggestionDisplayの使い方を知らず、SuggestBoxを 'MultiWordSuggestOracle'と使っています。

私を助けてくれてありがとう!

答えて

3

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

+0

こんにちはHibrand、ソリューションのおかげで多くのことを。それは夢のように働いた。そして非常に少ない変更で。私はまだこれが「回避」のようなものだと思っています。提案リストを表示/非表示にする方法がいくつかあります。 :) – hashcoder

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(); 
    } 

} 

であり、ここで実際にあなたがコンストラクタへの3つのパラメータを持つSuggestBoxを作成する必要が私のウィジェット

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

} 

です。

+0

こんにちはありがとうございます。あなたのコードをコピーして貼り付けてみましたが、以下のようなUiBinderエラーが発生します。 "テンプレートファイルSuggestBoxWidget.ui.xmlが不足しています/ ctl/qportal/dbutilweb/client/view)」を参照してください。私はまだUiBinderを使用していません...私は時間がかかるとこれを実装しようとします。今すぐ私は@Hilbrand Bouwkampの提案に行きます。つまり、SuggestBoxをTextBoxに置き換えてください(私は本当に急いでいます:)) – hashcoder

+0

あなたはUiBinderを使う必要はありません。 TextBoxをSuggestBoxコンストラクタに参照するだけで、TextBoxを簡単に作成してSuggest Boxに置き換えるだけです。次に、DefaultSuggestionDisplayクラスを使用して、提案を非表示にすることができます。 –

1

あなたは、この必要がありますだけで仕事™、SuggestionDisplay独自のものを使用しない場合:

((DefaultSuggestionDisplay) suggestBox.getSuggestionDisplay()).hideSuggestions(); 
関連する問題