GWT/MVP:detectando eventos de mudança em uma tabela com padrão MVP adequado
Pergunta
Estamos usando o gwt-presenter, mas não é realmente uma pergunta específica para isso...
Eu tenho uma tabela com usuários nela.À medida que construo a tabela na visualização (a partir dos dados fornecidos pelo apresentador), preciso adicionar dois botões de ação ("Editar" e "Excluir") no final da linha.
Qual é a melhor maneira de atribuir manipuladores de cliques a esses botões para que o apresentador saiba qual foi clicado?Antes disso, poderíamos passar um campo privado da visualização para o apresentador e anexar um manipulador de cliques discreto a esse botão.No entanto, este método é bastante rígido e não funciona muito bem neste cenário.
Desde já, obrigado.
Solução
Que tal fazer com que a view permita a assinatura de eventos de clique de edição/exclusão, registrando internamente os eventos de clique de linha individuais e depois delegando o tratamento dos eventos aos registrados pela view?
Quero dizer algo como o seguinte código pesudo:
Visualizar:
addRowEditClickHandler(ClickHandler handler) {
this.rowEditClickHandler = handler;
}
addRowDeleteClickHandler(ClickHandler handler) {
this.rowDeleteClickHandler = handler;
}
//... somewhere when setting up of the grid...
rowEditButton.addClickHandler = new ClickHandler() {
onClick(args) {
this.rowEditClickHandler.onClick(args)
}
rowDeleteButton.addClickHandler = new ClickHandler() {
onClick(args) {
this.rowDeleteClickHandler.onClick(args)
}
Apresentador:
View view = new View();
view.addRowEditClickHandler( new ClickHandler() {
onClick(args) {
doSomething();
}
});
view.addRowDeleteClickHandler( new ClickHandler() {
onClick(args) {
doSomething();
}
});