0

我的 MainPresenter 有一个带有按钮列的 CellTable。当您按下按钮时,演示者会调用“addToPopupSlot(editPopup, true)”。出现一个 editPopup,其中包含您可以在那里进行的几个设置。在弹出视图上按下保存按钮后,它将数据发送到 MainPresenter 中的 CellTable 想要获取的数据库。

我的问题是:当我点击保存按钮时,表格没有更新。我必须刷新页面或从另一个 Presenter 导航回 MainPresenter。

编辑弹出演示者

 @Override
protected void onBind() {
super.onBind();
this.username = Cookies.getCookie("domusr");
// hours and minutes displayed in listboxes
for (int i = 0; i < TimeSettings.HOURS_RANGE; i++) {
    getView().getBeginHoursLBX().addItem(String.valueOf(i));
    getView().getEndHoursLBX().addItem(String.valueOf(i));
    getView().getPauseHoursLBX().addItem(String.valueOf(i));
}

for (int i = 0; i < 60; i += TimeSettings.MINUTES_RANGE) {
    getView().getBeginMinutesLBX().addItem(String.valueOf(i));
    getView().getEndMinutesLBX().addItem(String.valueOf(i));
    getView().getPauseMinutesLBX().addItem(String.valueOf(i));
}

getView().getSaveBTN().addClickHandler(new ClickHandler() {

    @Override
    public void onClick(ClickEvent event) {
    DateTimeFormat dtf = DateTimeFormat.getFormat("yyyy-MM-dd");
    final String startHours = getView()
        .getBeginHoursLBX()
        .getValue(
            getView().getBeginHoursLBX().getSelectedIndex());
    final String startMinutes = getView().getBeginMinutesLBX()
        .getValue(
            getView().getBeginMinutesLBX()
                .getSelectedIndex());
    final String endHours = getView().getEndHoursLBX().getValue(
        getView().getEndHoursLBX().getSelectedIndex());
    final String endMinutes = getView()
        .getEndMinutesLBX()
        .getValue(
            getView().getEndMinutesLBX().getSelectedIndex());
    final String pauseHours = getView()
        .getPauseHoursLBX()
        .getValue(
            getView().getPauseHoursLBX().getSelectedIndex());
    final String pauseMinutes = getView().getPauseMinutesLBX()
        .getValue(
            getView().getPauseMinutesLBX()
                .getSelectedIndex());
    final String projectId = getView().getProjectIdLBL().getText();
    final java.sql.Date date = new java.sql.Date(dtf.parse(
        getView().getDateLBL().getText()).getTime());
    dispatcher.execute(
        new InsertTimesIntoDB(Integer.parseInt(startHours),
            Integer.parseInt(startMinutes), Integer
                .parseInt(endHours), Integer
                .parseInt(endMinutes), Integer
                .parseInt(pauseHours), Integer
                .parseInt(pauseMinutes), Integer
                .parseInt(projectId), date, username),
        new AsyncCallback<InsertTimesIntoDBResult>() {

            @Override
            public void onFailure(Throwable caught) {

            }

            @Override
            public void onSuccess(InsertTimesIntoDBResult result) {

            }
        });

    getView().hide();

    }
});
}

MainPresenter 中的 editColumn (onBind())

// edit column
    Column<Booking, String> editColumn = new Column<Booking, String>(
        new ButtonCell()) {
    @Override
    public String getValue(Booking booking) {
        return "edit";
    }
    };
    editColumn.setFieldUpdater(new FieldUpdater<Booking, String>() {

    @Override
    public void update(int index, Booking object, String value) {
        // pop up widget addToSlot call

        editPopup.getView().getDateLBL()
            .setText(String.valueOf(object.getFullDate()));
        editPopup.getView().getProjectIdLBL()
            .setText(String.valueOf(1234567));

        editPopup.getView().getBeginHoursLBX()
            .setItemSelected(object.getStartHours(), true);
        editPopup
            .getView()
            .getBeginMinutesLBX()
            .setItemText(
                minutesRange.getIndex(object
                    .getEndMinutes()),
                String.valueOf(object.getStartMinutes()));
        editPopup.getView().getEndHoursLBX()
            .setItemSelected(object.getEndHours(), true);
        editPopup
            .getView()
            .getEndMinutesLBX()
            .setItemText(
                minutesRange.getIndex(object
                    .getEndMinutes()),
                String.valueOf(object.getEndMinutes()));
        editPopup.getView().getPauseHoursLBX()
            .setItemSelected(object.getPauseHours(), true);
        editPopup
            .getView()
            .getPauseMinutesLBX()
            .setItemText(
                minutesRange.getIndex(object
                    .getEndMinutes()),
                String.valueOf(object.getPauseMinutes()));
        addToPopupSlot(editPopup, true);
    }
    });
    getView().getTimeTable().addColumn(editColumn);
4

1 回答 1

0

我想你在这里有一些解决方案。如果我是你,我会执行以下步骤:

  1. 在 MainPresenter 中创建事件侦听器。
  2. 当您完成更新数据库时(在弹出窗口中按保存后);我会触发一个事件。
  3. 当 MainPresenter 接收到事件时,您转到 DB 并获取数据(使用 getVisibleRange() 对其进行过滤)。
  4. 使用 setRowData(...) 方法刷新 CellTable(正确传递参数)

其他选项是创建一个与 CellTable 关联的 ListDataProvider,并在其上调用 refresh。

于 2013-06-06T10:55:30.543 回答