GWT的编辑器框架和GWTP



基于这个答案,我尝试将GWT编辑器集成到一个弹出式演示器小部件中。正确的做法是什么?

我的视图是这样的:

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在父演示器中,当单击父演示器中的按钮时调用,它实例化带有私有final DeviceEditorDialogPresenterWidget的对话框deviceEditorDialog;

谢谢!

下面是上面代码中缺少的几个关键点:

  • 你的DeviceEditorDialogView应该执行Editor<DeviceDto>。这是为了用POJO中的数据填充DeviceEditorDialogView字段所必需的。
  • 您的DeviceEditorDialogView应该有映射到POJO中的字段的子编辑器。例如,给定字段deviceDto.modelName(类型String),您可以在DeviceEditorDialogView中拥有一个名为modelName的GWT Label。这个Label实现了Editor<String>,当你调用driver.edit(deviceDto)
  • 时,它将被DeviceDto中的modelName填充。你应该只调用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

相关内容

  • 没有找到相关文章

最新更新