Как расширить / включить диалоговое окно с помощью GWT UiBinder? - PullRequest
1 голос
/ 07 августа 2011

Я хочу построить "с нуля" иерархию DialogBox. Во-первых, у меня есть

  • a BaseDialog.java class: простой диалог, расширяющий DialogBox (виджет gwt)

    public class BaseDialog extends DialogBox {
    
        protected static BaseDialog2UiBinder uiBinder = GWT
                .create(BaseDialog2UiBinder.class);
    
        interface BaseDialog2UiBinder extends UiBinder<Widget, BaseDialog2> {
        }
    
        @UiField
        protected FlowPanel contentPanel;
    
        public BaseDialog() {
            setWidget(uiBinder.createAndBindUi(this));
        }
    }
    
  • a BaseDialog.ui.xml

    <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
    <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
        xmlns:g="urn:import:com.google.gwt.user.client.ui">
    
        <g:VerticalPanel width="200px" height="200px">
            <g:Label>Label principal</g:Label>
            <g:FlowPanel ui:field="contentPanel" />
        </g:VerticalPanel>
    
    </ui:UiBinder>
    

Как видите, BaseDialog содержит простую метку и панель содержимого (FlowPanel).

Я хотел бы расширить BaseDialog (например, ConfirmationDialog). ConfirmationDialog заполняет содержимое contentPanel BaseDialog.

Как я могу это сделать?

Спасибо.

1 Ответ

3 голосов
/ 07 августа 2011

Хорошо, я нашел решение:

public class ConfirmationBox extends BaseDialog2 {
  protected static ConfirmationBoxUiBinder uiBinder = GWT.create(ConfirmationBoxUiBinder.class);

  interface ConfirmationBoxUiBinder extends UiBinder<Widget, ConfirmationBox> {
  }

  @UiField
  Label helloLabel;

  public ConfirmationBox() {
    contentPanel.add(uiBinder.createAndBindUi(this));
  }
}

И

<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
    xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:my="urn:import:com.guardis.cortex.web.client.dialog">

    <g:FlowPanel>
        <my:BaseDialog2>
            <g:FlowPanel ui:field="contentPanel">
                <g:Label>test contentPanel from confirmationBox</g:Label>
            </g:FlowPanel>
        </my:BaseDialog2>
        <g:Label ui:field="helloLabel">Hello world from confirmation box (outside of BaseDialog)</g:Label>
    </g:FlowPanel>
</ui:UiBinder> 
...