我正在使用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。请帮帮我怎么弄清楚?非常感谢。
答案 0 :(得分:2)
有两种方法可以做到这一点(MVP I或MVP II方式):
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
}
});
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);
}
});