1

GWTには、いくつかのテキストフィールドを持つFormPanelがあります。これらのフィールドにはChangeEventハンドラーがありますが、これらのハンドラーは実装固有を実行する必要があります。また、UiBinderを使用して動作する必要があり@UiHandlerます。

このフォームパネルを実装するクラスは2つあり、将来的にはさらに多くのクラスが登場する可能性があります。このフォームは、アプリケーションのデプロイメント環境ごとに変わるため、1か所にまとめる必要があります。

だから私が欲しいのは、実装ごとにハンドラーをオーバーライドすることです。現在私が考えていたのは、フォームインスタンスを実装するクラスをコンストラクターに渡し、その実装クラスで宣言されたメソッドをテキストフィールドのハンドラーから呼び出すことでしたが、何らかの方法でそのような実装クラスのメソッド。

私は現在、これをどのように行うべきかを考えることができません。私はここで何かが本当に欠けている可能性があります。これを行うための最良の方法は何でしょうか?

簡単な例

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 に答える