1

在 GWT 中,我有一个带有多个文本字段的 FormPanel。这些字段具有 ChangeEvent 处理程序,但问题是这些处理程序必须执行特定的实现。他们还必须使用 UiBinder 的@UiHandler.

有两个类实现了这个表单面板,未来可能会出现更多。我需要将此表单放在一个地方,因为它会根据应用程序的部署环境而改变。

所以我想要的是在每个实现中覆盖我的处理程序。目前我想到的是通过构造函数传递实现表单实例的类,然后从文本字段的处理程序调用在该实现类中声明的方法,但是我也想以某种方式强制声明这样一个实现类中的方法。

我目前想不出我应该如何去做,我可能真的在这里遗漏了一些东西。最好的方法是什么?

简要示例

FormPanelX

TabThatContainsFPX
PopupThatContainsFPX

选项卡和弹出窗口都包含表单面板,但字段上的操作处理程序必须在每种情况下执行略有不同。

4

1 回答 1

0

为什么他们必须使用 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 或 PopupThatContainsFPX 中,您可以执行类似的操作。

FormPanelX form = new FormPanelX();
form.getTextField().addChangeHandler(new ChangeHandler(){

        @Override
        public void onChange(ChangeEvent event) {
            //Implementation specific to TabThatContainsFPX

        }
    });
于 2012-12-14T07:55:11.633 回答