如何从Presenter处理Datagrid列的事件?

时间:2014-06-04 05:34:27

标签: java gwt gwt-rpc gwt2 gwt-mvp

我正在使用GWT MVP,我想处理来自Presenter的DataGrid列中的事件。 来自GWT DataGrid ShowCase ...

    // First name.
Column<ContactInfo, String> firstNameColumn =
    new Column<ContactInfo, String>(new EditTextCell()) {
      @Override
      public String getValue(ContactInfo object) {
        return object.getFirstName();
      }
    };
firstNameColumn.setSortable(true);
sortHandler.setComparator(firstNameColumn, new Comparator<ContactInfo>() {
  @Override
  public int compare(ContactInfo o1, ContactInfo o2) {
    return o1.getFirstName().compareTo(o2.getFirstName());
  }
});
dataGrid.addColumn(firstNameColumn, constants.cwDataGridColumnFirstName());
firstNameColumn.setFieldUpdater(new FieldUpdater<ContactInfo, String>() {
  @Override
  public void update(int index, ContactInfo object, String value) {
    // Here I would like to call RPC methods
  }
});
dataGrid.setColumnWidth(firstNameColumn, 20, Unit.PCT);

上面的例子,这段代码写在View方面,它只是一个例子。作为mvp模式,我只需要调用rpc请求来更新数据库。这不能在View方面完成,但我不知道如何从我的演示者设置FieldUpdater。请帮帮我怎么弄清楚?非常感谢。

1 个答案:

答案 0 :(得分:2)

有两种方法可以做到这一点(MVP I或MVP II方式):

MVP 1风格:

http://www.gwtproject.org/articles/mvp-architecture.html

setter(即View)上创建一个setFieldUpdater(FieldUpdater<ContactInfo, String>),其FieldUpdater并将其添加到列中。从Presenter您可以致电(前提是view是您的视图的引用)。

<强>演示

view.setFieldUpdater(new FieldUpdater<ContactInfo, String>() {
  @Override
  public void update(int index, ContactInfo object, String value) {
    // Make the RPC call
  }
});

MVP2风格:

http://www.gwtproject.org/articles/mvp-architecture-2.html

如果您的View引用回Presenter。然后你可以在Presenter上调用一个函数。

查看

firstNameColumn.setFieldUpdater(new FieldUpdater<ContactInfo, String>() {
  @Override
  public void update(int index, ContactInfo object, String value) {
    getPresenter().onUpdate(info,value);
  }
});