Come gestire gli eventi della colonna Datagrid da Presenter?
Domanda
sto usando MVP del GWT e vorrei gestire gli eventi in colonne di DataGrid dal Presentatore.Da Vetrina GWT DataGrid ...
// 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);
Sopra l'esempio, questo codice sta scrivendo Visualizzazione lato ed è davvero un esempio.Come modello mvp, devo solo chiamare la richiesta rpc per aggiornare il database.Questo non può essere fatto Visualizzazione side ma non ho idea di come impostarlo FieldUpdater dal mio presentatore.Per favore aiutami come posso capirlo?Grazie mille.
Soluzione
Esistono due modi per farlo (modo MVP I o MVP II):
Stile MVP 1:
http://www.gwtproject.org/articles/mvp-architecture.html
Creare un setter
sul tuo View
(cioè. setFieldUpdater(FieldUpdater<ContactInfo, String>)
) che richiede a FieldUpdater
e lo aggiunge alla colonna.Dal Presenter
puoi chiamare (a condizione che view
è il riferimento alla tua vista).
Presentatore:
view.setFieldUpdater(new FieldUpdater<ContactInfo, String>() {
@Override
public void update(int index, ContactInfo object, String value) {
// Make the RPC call
}
});
Stile MVP2:
http://www.gwtproject.org/articles/mvp-architecture-2.html
Se hai un riferimento dal tuo View
torna al tuo Presenter
.Quindi puoi chiamare una funzione sul tuo Presenter
.
Visualizzazione:
firstNameColumn.setFieldUpdater(new FieldUpdater<ContactInfo, String>() {
@Override
public void update(int index, ContactInfo object, String value) {
getPresenter().onUpdate(info,value);
}
});