Wie gehe ich mit den Ereignissen der Datagrid-Spalte von Presenter aus um?
Frage
ich benutze GWT MVP und ich möchte Ereignisse in Spalten von behandeln DataGrid vom Moderator.Aus 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);
Im obigen Beispiel wird dieser Code geschrieben Sicht Seite und es ist wirklich ein Beispiel.Als MVP-Muster muss ich nur die RPC-Anfrage aufrufen, um die Datenbank zu aktualisieren.Das ist nicht möglich Sicht Seite, aber ich habe keine Ahnung, wie ich das einstellen soll FieldUpdater von meinem Moderator.Bitte helfen Sie mir, wie kann ich es herausfinden?Vielen Dank.
Lösung
Es gibt zwei Möglichkeiten, dies zu tun (MVP I- oder MVP II-Methode):
MVP 1-Stil:
http://www.gwtproject.org/articles/mvp-architecture.html
Ein ... kreieren setter
auf Ihrem View
(d. h. setFieldUpdater(FieldUpdater<ContactInfo, String>)
), das dauert eine FieldUpdater
und fügt es der Spalte hinzu.Von dem Presenter
Sie können anrufen (vorausgesetzt, dass view
ist der Verweis auf Ihre Ansicht).
Moderator:
view.setFieldUpdater(new FieldUpdater<ContactInfo, String>() {
@Override
public void update(int index, ContactInfo object, String value) {
// Make the RPC call
}
});
MVP2-Stil:
http://www.gwtproject.org/articles/mvp-architecture-2.html
Wenn Sie eine Referenz von Ihrem haben View
zurück zu deinem Presenter
.Dann können Sie eine Funktion auf Ihrem aufrufen Presenter
.
Sicht:
firstNameColumn.setFieldUpdater(new FieldUpdater<ContactInfo, String>() {
@Override
public void update(int index, ContactInfo object, String value) {
getPresenter().onUpdate(info,value);
}
});