【问题标题】:gwt uibinder in an abstract parent class抽象父类中的 gwt uibinder
【发布时间】:2011-12-07 19:02:34
【问题描述】:

我想知道是否有办法将 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();
    }
}

基本上这将允许任何子类执行以下操作:

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

默认构造函数将负责将 MyPanel 绑定到 MyPanel.ui.xml 的所有代码。

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

提前致谢。

【问题讨论】:

    标签: gwt uibinder gwt2


    【解决方案1】:

    执行抽象 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());
      }
    }
    

    【讨论】:

    • 如果你也想避免重复的 ui.xml 代码,你还是应该走这条路。不过,将可能重复的布局代码放在一个完全独立的小部件中。这个单独的小部件应该实现HasWidgets,然后您可以在所有各种 subclass.ui.xml 文件中使用它。
    • 我已经完成了这两个建议(基本小部件中的公共字段和减少 ui.xml)。我真的只是想知道绑定器调用是否也可以抽象。听起来@strelock 你说它不正确?
    猜你喜欢
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    相关资源
    最近更新 更多