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.

Foi útil?

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);
  }
});
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top