¿Cómo manejar los eventos de la columna Datagrid desde Presenter?
Pregunta
estoy usando Jugador Más Valioso de GWT y me gustaría manejar eventos en columnas de Cuadrícula de datos del presentador.De Caso de exhibición de 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);
En el ejemplo anterior, este código está escrito en Vista lado y es realmente un ejemplo.Como patrón mvp, solo necesito llamar a la solicitud rpc para actualizar la base de datos.Esto no se puede hacer en Vista lado pero no tengo idea de cómo configurar Actualizador de campo de mi presentador.Por favor ayúdenme ¿cómo puedo resolverlo?Muchas gracias.
Solución
Hay dos formas de hacer esto (forma MVP I o MVP II):
Estilo MVP 1:
http://www.gwtproject.org/articles/mvp-architecture.html
Crear un setter
en tu View
(es decir. setFieldUpdater(FieldUpdater<ContactInfo, String>)
) que requiere un FieldUpdater
y lo agrega a la columna.Desde el Presenter
puedes llamar (siempre que view
es la referencia a su Vista).
Presentador:
view.setFieldUpdater(new FieldUpdater<ContactInfo, String>() {
@Override
public void update(int index, ContactInfo object, String value) {
// Make the RPC call
}
});
Estilo MVP2:
http://www.gwtproject.org/articles/mvp-architecture-2.html
Si tienes una referencia de tu View
volver a tu Presenter
.Entonces puedes llamar a una función en tu Presenter
.
Vista:
firstNameColumn.setFieldUpdater(new FieldUpdater<ContactInfo, String>() {
@Override
public void update(int index, ContactInfo object, String value) {
getPresenter().onUpdate(info,value);
}
});