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
   }
    ...
    ...
    ...

}

我没有触发 onSelecion 方法。

请帮忙。

4

1 回答 1

1

MySuggestBox不会将 SelectionHandler 添加到实际SuggestBox中,而是将Composite其添加到扩展中。当 SuggestBox 触发时,它不会在您的建议框中找到添加的处理程序。您可以通过将处理程序添加MySuggestBox到实际的建议框字段来修复它:

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