2011-12-07 8 views
3

抽象親クラスにgwtのuibinderロジックを構築して、バインドするすべてのクラスでコードを繰り返す必要がないかどうか疑問に思っています。抽象親クラスのgwtのuibinder

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

デフォルトコンストラクタ:

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(); 
    } 
} 

は基本的に、これは任意の子クラスは、このような何かを行うことができるようになる:

例えば、私はこのような何かを行うことができるようにしたいのですがMyPanelをMyPanel.ui.xmlにバインドするすべてのコードを処理します。

基本的に私は怠け者になりたいと思っていますし、インターフェイスとバインダーを一度構築して共通の方法で済ませればいいだけです。思考?

ありがとうございます。

答えて

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()); 
    } 
} 
+0

ui.xmlコードも重複しないようにするには、このルートを使用する必要があります。しかし、重複するレイアウトコードを完全に別のウィジェットに入れてください。この別個のウィジェットは 'HasWidgets'を実装しなければなりません。そしてあなたは様々なsubclass.ui.xmlファイルのすべてでそれを使うことができます。 –

+0

私は両方の提案(ベースウィジェットの共通フィールドとui.xmlの縮小)を行っています。私はバインダー呼び出しも抽象化できるかどうか本当に不思議だった。 @strelockのように聞こえますが、修正できないと言っていますか? – jctierney