GWTP:弹出式演示者的正确信息流

GWTP:弹出式演示者的正确信息流,gwt,gwt-platform,Gwt,Gwt Platform,我有一个任务:我有一对演示者/视图(我们称之为ItemListPresenter)显示一个Celltable。现在我想通过双击一个项目(或者按一个按钮,随便什么)来编辑它。然后会出现一个弹出对话框(我们称之为PopupWidget),让我可以编辑我的项目属性。 我找到了解决方法,但我不确定这是“正确”的方法。由于我正在努力学习GWT/GWTP背后的理念,如果您能给我一些提示,说明我做对了什么,做错了什么,我将不胜感激: 在ItemListPresenter的onbind方法中,我使用双击处理程序

我有一个任务:我有一对演示者/视图(我们称之为ItemListPresenter)显示一个Celltable。现在我想通过双击一个项目(或者按一个按钮,随便什么)来编辑它。然后会出现一个弹出对话框(我们称之为PopupWidget),让我可以编辑我的项目属性。 我找到了解决方法,但我不确定这是“正确”的方法。由于我正在努力学习GWT/GWTP背后的理念,如果您能给我一些提示,说明我做对了什么,做错了什么,我将不胜感激:

在ItemListPresenter的onbind方法中,我使用双击处理程序连接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小部件中设置我要编辑的对象(SelectedDeviceTo)是不对的。这是“正确”的方式吗

我的弹出式演示器,定义为

public class DeviceEditDialogPresenterWidget extends PresenterWidget<DeviceEditDialogPresenterWidget.MyView> implements
            DeviceEditDialogUiHandlers {
这会触发my DeviceEditDialogPresenterWidget,它本身会触发以下事件:

@Override
public void updateDevice(DeviceDto device) {
    eventBus.fireEvent(new DeviceUpdatedEvent(device));
}
此事件由CellTable的“母亲”演示者中的处理程序捕获,CellTable再次连接到onBind方法中:

addRegisteredHandler(DeviceUpdatedEvent.TYPE, new DeviceUpdatedEvent.DeviceUpdatedHandler() {
    @Override
    public void onDeviceUpdatedEvent(DeviceUpdatedEvent event) {
        updateDevice(event.getDevice());
    }
}); 
我真的很想避免走上一条乱七八糟的错误之路,所以任何提示都将不胜感激

谢谢
Arthur

PresenterWidget
通常设计为具有
设置器,用于设置
模型或
DTO
,以
PresenterWidget
工作(与您的工作方式相同)

或者,您可以避免使用
PresenterWidget
,并使用手动添加到
ListItemEditor
中的
PopupPanel
对话框中的
编辑器

这样可以避免演示者Widget的复杂性。但是您必须处理
列表项演示器
中的单击(即保存按钮)。我总是尝试从小事做起(使用组合),如果您意识到在其他地方也可能需要该功能,请创建一个
PresenterWidget

另外,您不需要
updateDevice
方法,因为您将引用传递给
DTO
。您只需刷新
单元格表


但除此之外,您的方法看起来还不错。

谢谢您的输入:)我尝试的方法是否有效,还是应该重新考虑并使用对话框和编辑器?我想使用PresenterWidget尝试以GWTP的方式来实现这一点。
addRegisteredHandler(DeviceUpdatedEvent.TYPE, new DeviceUpdatedEvent.DeviceUpdatedHandler() {
    @Override
    public void onDeviceUpdatedEvent(DeviceUpdatedEvent event) {
        updateDevice(event.getDevice());
    }
});