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



我有这个任务:我有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());

感觉不对的是在对话框演示器小部件中设置我想编辑的对象(selectedDeviceDto)。这是"正确"的方式吗?

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

public class DeviceEditDialogPresenterWidget extends PresenterWidget<DeviceEditDialogPresenterWidget.MyView> implements
            DeviceEditDialogUiHandlers {

仍然很难看,因为我只是将每个属性设置到一个文本框中,编辑后,我重新收集属性并重新构建对象。这是混乱的,我想我应该GWT编辑器。但是,当我点击对话框中的"保存"按钮时,会触发一个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));
}

这个事件被带有CellTable的"母亲"演示器中的处理程序捕获,它再次在onBind方法中连接:

addRegisteredHandler(DeviceUpdatedEvent.TYPE, new DeviceUpdatedEvent.DeviceUpdatedHandler() {
    @Override
    public void onDeviceUpdatedEvent(DeviceUpdatedEvent event) {
        updateDevice(event.getDevice());
    }
}); 

我真的很想避免走上混乱的错误之路,所以任何提示都会很感激。

谢谢亚瑟

PresenterWidgets通常被设计为具有用于设置PresenterWidget工作的ModelDTOsetter(与您所做的方式相同)。

或者,您可以避免PresenterWidget并使用Editor(扩展复合),您手动添加到ListItemEditor中的PopupPanelDialogBox

这样可以避免PresenterWidget的复杂性。但你必须处理点击(即保存按钮)从ListItemPresenter。我总是尝试从小处开始(使用复合),如果你意识到你可能在其他地方也需要这个功能,创建一个PresenterWidget

您也不需要updateDevice方法,因为您传递了对DTO的引用。你只需要刷新CellTable
但除此之外,你的方法看起来不错。

相关内容

  • 没有找到相关文章

最新更新