抽象父类中的gwt uibinder

jct*_*ney 3 gwt uibinder gwt2

我想知道是否有办法将gwt uibinder逻辑构建到抽象父类中,这样我就不必在每个想要绑定的类中重复代码.

例如,我希望能够做到这样的事情:

public abstract class BasePanel<Panel extends BasePanel> extends Composite {
    interface Binder<BinderPanel extends BasePanel> extends UiBinder<Widget, BinderPanel> { }
    private static final Binder binder = GWT.create(Binder<Panel>.class);

    public BasePanel() {
        initWidget(binder.createAndBindUi(this));
        init();
    }
}
Run Code Online (Sandbox Code Playgroud)

基本上这会允许任何子类做这样的事情:

public MyPanel extends BasePanel<MyPanel> {
    //my code here
}
Run Code Online (Sandbox Code Playgroud)

默认构造函数将处理将MyPanel绑定到MyPanel.ui.xml的所有代码.

基本上我想要懒惰,只需要构建一次接口和活页夹,以便以通用的方式完成.想法?

提前致谢.

Str*_*lok 6

做抽象UI绑定器类的正确方法是定义一个超类,它将包含所有子类窗口小部件共有的逻辑.此类可以包含标记为@UiField,事件处理程序和进入UI绑定程序类的任何其他内容的字段.并且子类实际上具有UI绑定器实例化逻辑.所以像这样:

public abstract BaseWidget extends Composite {
  @UiField TextBox textBoxCommon1;
  @UiField TextBox textBoxCommon2;

  @UiHandler("textBoxCommon1")
  void onTextBoxCommon1Changed( ValueChangeEvent<String> event ) {
    //...
  }

  @UiHandler("textBoxCommon2")
  void onTextBoxCommon2Changed( ValueChangeEvent<String> event ) {
    //...
  }
}

public class SomeWidget extends BaseWidget {
  interface SomeWidgetUiBinder extends UiBinder<Widget,SomeWidget> {}

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

  @UiField Button someWidgetButton;

  public SomeWidget() {
    initWidget(uiBinder.createAndBindUi(this));
  }

  @UiHandler("someWidgetButton")
  void onButtonClicked(ClickEvent e) {
    Window.alert(textBoxCommon1.getValue());
  }
}
Run Code Online (Sandbox Code Playgroud)