Como lidar com eventos da coluna Datagrid do Presenter?
Pergunta
estou usando MVP do GWT e eu gostaria de lidar com eventos em colunas de Grade de dados do apresentador.De Exemplo de DataGrid do GWT ...
// 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);
Acima do exemplo, este código está escrito em Visualizar lado e é realmente um exemplo.Como padrão mvp, só preciso chamar a solicitação rpc para atualizar o banco de dados.Isso não pode ser feito em Visualizar lado, mas não tenho ideia de como definir Atualização de campo do meu apresentador.Por favor me ajude como posso descobrir isso?Muito obrigado.
Solução
Existem duas maneiras de fazer isso (forma MVP I ou MVP II):
Estilo MVP 1:
http://www.gwtproject.org/articles/mvp-architecture.html
Criar uma setter
Nas suas View
(ou seja, setFieldUpdater(FieldUpdater<ContactInfo, String>)
) que leva um FieldUpdater
e adiciona-o à coluna.De Presenter
você pode ligar (desde que view
é a referência à sua View).
Apresentador:
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
Se você tiver uma referência do seu View
de volta ao seu Presenter
.Então você pode chamar uma função no seu Presenter
.
Visualizar:
firstNameColumn.setFieldUpdater(new FieldUpdater<ContactInfo, String>() {
@Override
public void update(int index, ContactInfo object, String value) {
getPresenter().onUpdate(info,value);
}
});