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

时间:2014-07-03 06:54:09

标签: gwt gwt-platform

我有这个任务:我有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的演示者,再次在o​​nBind方法中连接:

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

我真的想避免陷入混乱的错误之路,所以任何提示都会受到赞赏。

由于 亚瑟

1 个答案:

答案 0 :(得分:0)

PresenterWidgets通常设计为setter,用于设置Model工作的DTOPresenterWidget(与您一样)做到了。)

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

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

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