2014-07-03 107 views
0

基於this answer構建,我嘗試將GWT編輯器集成到彈出的演示器小部件中。什麼是正確的方法來做到這一點?GWT的編輯器框架和GWTP

我的看法是這樣的:

public class DeviceEditorDialogView extends 
     PopupViewWithUiHandlers<DeviceEditorDialogUiHandlers> implements 
     DeviceEditorDialogPresenterWidget.MyView { 
    interface Binder extends UiBinder<PopupPanel, DeviceEditorDialogView> { 
    } 
    public interface Driver extends SimpleBeanEditorDriver<DeviceDto, DeviceEditorDialogView> { 
    } 

    @Inject 
    DeviceEditorDialogView(Binder uiBinder, EventBus eventBus) { 
     super(eventBus); 

     initWidget(uiBinder.createAndBindUi(this)); 
    } 


    @Override 
    public SimpleBeanEditorDriver<DeviceDto, ?> createEditorDriver() { 
     Driver driver = GWT.create(Driver.class); 
     driver.initialize(this); 
     return driver; 
    } 

} 

,我的演講是這樣的:

public class DeviceEditorDialogPresenterWidget extends PresenterWidget<DeviceEditorDialogPresenterWidget.MyView> implements 
      DeviceEditorDialogUiHandlers { 

    @Inject 
    DeviceEditorDialogPresenterWidget(EventBus eventBus, 
           MyView view) { 
     super(eventBus, view); 
     getView().setUiHandlers(this); 
    } 
    /** 
    * {@link LocalDialogPresenterWidget}'s PopupView. 
    */ 
    public interface MyView extends PopupView, DevicesEditView<DeviceDto>, HasUiHandlers<DeviceEditorDialogUiHandlers> { 

    } 

    private DeviceDto currentDeviceDTO = null; 

    private SimpleBeanEditorDriver<DeviceDto, ?> driver; 

    public DeviceDto getCurrentDeviceDTO() { 
     return currentDeviceDTO; 
    } 

    public void setCurrentDeviceDTO(DeviceDto currentDeviceDTO) { 
     this.currentDeviceDTO = currentDeviceDTO; 
    } 

    @Override 
    protected void onBind() { 
     super.onBind(); 

     driver = getView().createEditorDriver(); 
    } 
    //UiHandler Method: Person person = driver.flush(); 

} 

這是正確的做法?什麼不見​​了?目前,沒有任何反應,當我嘗試使用這樣的:

@Override 
public void showDeviceDialog() { 
    deviceEditorDialog.setCurrentDeviceDTO(new DeviceDto()); 
    addToPopupSlot(deviceEditorDialog); 

} 

showDeviceDialog是在父演示,並單擊該父演示,實例化與私人最終DeviceEditorDialogPresenterWidget deviceEditorDialog對話框按鈕時調用;

謝謝!

+0

你可以發佈'GinInjector'錯誤嗎? –

+0

我很抱歉,我做了一個新手錯誤,忘記綁定ApplicationModule中的視圖和演示者。我在上面重申了我的問題,因爲我不知道這是否是正確的做法。 – Fluffy

回答

3

下面是從您上面的代碼缺少幾個關鍵點:

  • DeviceEditorDialogView應實現Editor<DeviceDto>。爲了使DeviceEditorDialogView的字段填充來自POJO的數據,這是必需的。
  • 您的DeviceEditorDialogView應該有映射到POJO中字段的子編輯器。例如,給定字段deviceDto.modelName(類型String),您可以在DeviceEditorDialogView中爲GWT Label命名爲modelName。這Label實現Editor<String>,將與modelNameDeviceDto填充,當你調用driver.edit(deviceDto)
  • 你應該叫driver.initialize(this)只有一次,在DeviceEditorDialogView的構造

您應該重寫onReveal()這樣的:

@Override 
public void onReveal() { 
    super.onReveal(); 

    driver.edit(currentDeviceDTO); // this will populate your view with the data from your POJO 
} 

當彈出窗口顯示時,此方法將被調用,剛好在您的DeviceEditorDialogPresenterWidget已被addToPopupSlot

+0

感謝您的諮詢!如果我將createEditorDriver()的功能移動到構造函數中,那麼它應該看起來如何?它必須實施。 – Fluffy

+1

我剛剛得到它運行:)我的代表太低,否則我會投你。謝謝你的結構良好的答案。 – Fluffy

+2

現在我可以給你投票了;) – Fluffy