抽象父类中的 gwt uibinder

标签 gwt uibinder gwt2

我想知道是否有一种方法可以将 gwt uibinder 逻辑构建到抽象父类中,这样我就不必在每个要绑定(bind)的类中重复代码。

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

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

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

public MyPanel extends BasePanel<MyPanel> {
    //my code here
}

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

基本上我想偷懒,只需要构建一次界面和 Binder ,这样它就可以以通用的方式完成。想法?

提前致谢。

最佳答案

抽象 UI 绑定(bind)类的正确方法是定义一个父类(super class),该父类(super class)将包含所有子类小部件共有的逻辑。此类可以具有标记为 @UiField 的字段、事件处理程序以及进入 UI Binder 类的任何其他内容。而子类实际上有 UI binder 实例化逻辑。所以像这样:

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

关于抽象父类中的 gwt uibinder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8420953/

相关文章:

java - 在 GWT 中创建具有向下钻取功能的下拉菜单。

asp.net - 从 ASP.NET 3.5 应用程序在 IFRAME 内运行 GWT 应用程序(包括小程序)?

gwt - 在 GWT 中使用软排列的权衡?

java - 如何使用 fileUpload 在 GWT 中将文件从客户端传输到服务器

当 IE8 模拟 IE9 时,GWT 工具未在 IE8 中加载

java - 根据格式比较日期

java - GWT/GXT 国际化问题

GWT Uibinder 图像显示但不调整大小

java - GWT:SplitLayoutPanel UiBinder

gwt - 将 ClickHandler 添加到包含许多其他小部件的 div