我想知道是否有办法将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的所有代码。
基本上我想要变得懒惰,只需要构建一次接口和活页夹,以便以通用方式完成。想法?
提前感谢。
答案 0 :(得分: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());
}
}