我有这个任务:我有Presenter / View Couple(让我们称之为ItemListPresenter),显示一个Celltable。现在我想通过双击它来编辑一个项目(或者按一个按钮,无论如何)。然后会出现一个弹出对话框(让我们称之为PopupWidget),让我编辑我的项目属性。 我找到了一个解决方法,但我不确定这是"对"办法。由于我正在努力学习GWT / GWTP背后的哲学,如果你能给我提示我做得对,我做错了,我将不胜感激:
在ItemListPresenter的onbind方法中,我使用DoubleClick处理程序连接CellTable:
getView().getCellTable().setSelectionModel(selectionModel);
getView().getCellTable().addDomHandler(new DoubleClickHandler() {
@Override
public void onDoubleClick(final DoubleClickEvent event) {
DeviceDto selectedDeviceDto = selectionModel.getSelectedObject();
//TODO: Figure out how to best handle editing of DeviceDto
if (selectedDeviceDto != null) {
devicesDialog.setCurrentDeviceDTO(selectedDeviceDto);
addToPopupSlot(devicesDialog);
}
} }, DoubleClickEvent.getType());
感觉不对是在Dialog Presenter小部件中设置我想编辑的对象(selectedDeviceDto)。这是"对"方式是什么?
我的弹出式演示器,定义为
public class DeviceEditDialogPresenterWidget extends PresenterWidget<DeviceEditDialogPresenterWidget.MyView> implements
DeviceEditDialogUiHandlers {
仍然很难看,因为我只是将每个属性设置为一个文本框,在编辑之后,我会重新收集属性并重建对象。这是凌乱的,我想我应该GWT编辑。但是,当我点击&#34; Save&#34;对话框中的按钮,触发了UiHandler:
@UiHandler("okButton")
void okButtonClicked(ClickEvent event) {
DeviceDto dev = new DeviceDto(idBox.getText(), deviceIdBox.getText(), typeBox.getText(), firmwareVersionBox.getText(), userBox.getText(), statusBox.getText());
getUiHandlers().updateDevice(dev);
hide();
}
这会触发我的DeviceEditDialogPresenterWidget,它本身会触发事件:
@Override
public void updateDevice(DeviceDto device) {
eventBus.fireEvent(new DeviceUpdatedEvent(device));
}
此事件由&#34;母亲&#34;中的处理程序捕获。使用CellTable的演示者,再次在onBind方法中连接:
addRegisteredHandler(DeviceUpdatedEvent.TYPE, new DeviceUpdatedEvent.DeviceUpdatedHandler() {
@Override
public void onDeviceUpdatedEvent(DeviceUpdatedEvent event) {
updateDevice(event.getDevice());
}
});
我真的想避免陷入混乱的错误之路,所以任何提示都会受到赞赏。
由于 亚瑟
答案 0 :(得分:0)
PresenterWidgets
通常设计为setter
,用于设置Model
工作的DTO
或PresenterWidget
(与您一样)做到了。)
或者,您可以避免使用PresenterWidget
,并使用Editor
(扩展复合词)手动添加到PopupPanel
中的DialogBox
或ListItemEditor
。
这样可以避免PresenterWidget
的复杂性。但是你必须处理来自ListItemPresenter
的点击(即保存按钮)。我总是尝试从小处开始(使用复合材料),如果您意识到在其他地方也可能需要该功能,请创建一个PresenterWidget
。
此外,您不需要updateDevice
方法,因为您将引用传递给DTO
。您只需要刷新CellTable
但除此之外,你的方法看起来还不错。