1

uibinder を使用してカスタム SuggestBox を作成し、uibinder を使用するビューで使用します。

私の問題は、カスタムの提案ボックスを使用しているビューに onSelection イベントを発生できないことです

以下は私のコードです。

MySuggestBox.ui.xml

<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui">
<ui:style>

</ui:style>
<g:SuggestBox ui:field="suggestionBox"></g:SuggestBox>
</ui:UiBinder> 

MySuggestBox.java

public class MySuggestBox extends Composite implements IsWidget, HasSelectionHandlers<Suggestion>{

    private static mySuggestBoxUiBinder uiBinder = GWT
        .create(mySuggestBoxUiBinder.class);

    interface MySuggestBoxUiBinder extends
        UiBinder<Widget, MySuggestBox> {
    }

   @UiField SuggestBox suggestionBox;
   public mySuggestBox(){
       initWidget(uiBinder.createAndBindUi(this));
   }

   @Override
   public HandlerRegistration addSelectionHandler(SelectionHandler<Suggestion> handler)  {
      return addHandler(handler, SelectionEvent.getType());
   }
    ...
    ...
    ...

}

ここで上記のウィジェットを使用しています

MySuggestBoxExample.ui.xml

<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui
    xmlns:my="urn:import:com.myproject.mywidget">
<ui:style>

</ui:style>
<my:MySuggestBox ui:field="suggestBox" />
</ui:UiBinder> 

MySuggestBoxExample.java

public class MySuggestBoxExample extends Composite implements IsWidget{

    private static mySuggestBoxExampleUiBinder uiBinder = GWT
        .create(mySuggestBoxExampleUiBinder.class);

    interface MySuggestBoxExampleUiBinder extends
        UiBinder<Widget, MySuggestBoxExample> {
    }

   @UiField MySuggestBox suggestBox;
   public MySuggestBoxExample (){
       initWidget(uiBinder.createAndBindUi(this));
   }

   @UiHandler("suggestBox")
   public void onSelection(SelectionEvent<Suggestion> event){
      //I DONT GET THIS EXECUTED
   }
    ...
    ...
    ...

}

onSelection メソッドがトリガーされません。

助けてください。

4

1 に答える 1

1

あなたMySuggestBoxは SelectionHandler を実際の に追加しませんSuggestBoxが、Composite拡張します。SuggestBox がトリガーされると、提案ボックスに追加されたハンドラーが見つかりません。MySuggestBox実際のSuggestionboxフィールドにハンドラを追加することで修正できます:

@Override
public HandlerRegistration addSelectionHandler(SelectionHandler<Suggestion> handler)  {
  return suggestionBox.addSelectionHandler(handler);
}
于 2012-11-17T11:02:13.870 に答える