2014-07-03 98 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