基于这个答案,我尝试将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
的GWTLabel
。这个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