在GWT中,我有一个包含多个文本字段的FormPanel。这些字段有ChangeEvent处理程序,但问题是这些处理程序必须执行特定于实现的操作。它们还必须使用UiBinder的@UiHandler
。
有两个类实现了这个表单面板,将来可能还会有更多的类。我需要将此表单放在一个位置,因为它将根据应用程序的部署环境进行更改。
因此,我想要的是在每个实现中覆盖我的处理程序。目前,我的想法是通过构造函数传递实现表单实例的类,然后从文本字段的处理程序调用该实现类中声明的方法,但我也希望以某种方式强制在实现类中宣布这样的方法。
我现在想不出该怎么做,我可能真的错过了什么。最好的方法是什么?
简要示例
FormPanelX
TabThatContainsFPX
PopupThatContainsFPX
选项卡和弹出窗口都包含表单面板,但字段上的操作处理程序在每种情况下的执行必须略有不同。
为什么它们必须使用UiBinder的@UiHandler?您不必以这种方式附加处理程序。
我猜你有一个看起来像这样的复合物。
public class FormPanelX extends Composite {
private static FormPanelXUiBinder uiBinder = GWT
.create(FormPanelXUiBinder.class);
interface FormPanelXUiBinder extends UiBinder<Widget, FormPanelX> {
}
public FormPanelX() {
initWidget(uiBinder.createAndBindUi(this));
}
@UiField
FormPanel formPanel;
@UiField
TextBox textField;
private HandlerRegistration handlerRegistration;
public FormPanelX(String firstName) {
initWidget(uiBinder.createAndBindUi(this));
}
public TextBox getTextField() {
return textField;
}
public void setTextField(TextBox textField) {
this.textField = textField;
}
}
最简单的方法可能是为文本字段提供一个get方法,这样您就可以直接将更改处理程序附加到它上
然后在TabThatContainsFPX或PopupThatConteinsFPX中,您可以执行以下操作。。
FormPanelX form = new FormPanelX();
form.getTextField().addChangeHandler(new ChangeHandler(){
@Override
public void onChange(ChangeEvent event) {
//Implementation specific to TabThatContainsFPX
}
});