2011-12-07 3 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'을 구현해야하며, 다양한 하위 클래스 .ui.xml 파일 모두에서 사용할 수 있습니다. –

+0

두 가지 제안 (기본 위젯의 공통 필드 및 ui.xml 축소)을 수행했습니다. 바인더 호출을 추상화 할 수 있는지 궁금합니다. 그것은 @strelock처럼 들릴 것입니다. – jctierney