如何处理来自 Presenter 的 Datagrid 列的事件?

Posted

技术标签:

【中文标题】如何处理来自 Presenter 的 Datagrid 列的事件?【英文标题】:How to handle Datagrid column's events from Presenter? 【发布时间】:2014-06-04 05:34:26 【问题描述】:

我正在使用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】:

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

MVP 1 风格:

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

在您的View(即setFieldUpdater(FieldUpdater&lt;ContactInfo, String&gt;))上创建一个setter,该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);
  
);

【讨论】:

谢谢Ümit,现在我明白了。感谢 mvp-architecture-2 ,我以前只知道 mvp-architecture-1 。现在我可以从演示者添加或控制数据网格的处理程序。感谢您的完美回答。 当然,np,我实际上建议采用 MVP-II 方法,因为它使测试更容易和更清洁。

以上是关于如何处理来自 Presenter 的 Datagrid 列的事件?的主要内容,如果未能解决你的问题,请参考以下文章

Android/Parse-如何处理来自 ParseQuery 的多个回调

Core Data + iCloud 如何处理来自云端的数据更新

如何处理来自显示视频的网页的响应流?

如何处理来自 API 调用的 ios 数据

你如何处理来自 AJAX 调用的错误?

如何处理来自代理的额外 HTTP 标头?