Как я могу получить отредактированный прокси из RequestFactoryEditorDriver

Я не могу понять, как обновить таблицу ячеек после внесения изменений с помощью редактора. Если бы я мог получить отредактированный прокси, я мог бы использовать поставщик данных для обновления моей таблицы ячеек.

public void saveCampaign() {
  driver.flush();
  // the problem. proxy at this point should have the new values?....
  context.persist().using(proxy).fire(new Receiver<Void>() {
    @Override
    public void onSuccess(Void response) {
      showListView();
    }
  });
}

Прокси в .using(proxy) не содержит изменений, сделанных в редакторе. Однако метод persist на сервере получает обновленные значения. Если я перезагружу данные с сервера, я получу правильные значения в таблицу ячеек.

public void editCampaign(CampaignProxy proxy) {
  this.proxy = proxy;
  if (proxy != null) {
    context = AEHOME.requestFactory.campaignRequest();
    showEditView();
  }
}

private void showEditView() {
  driver.initialize(eventBus, AEHOME.requestFactory, editView);
  driver.edit(proxy, context);
  deckPanel.showWidget(deckPanel.getWidgetIndex(editView));
}

Прокси задается в виде списка: configurationPageView.proxy = selectionModel.getSelectedObject();

Мы будем очень признательны за любые советы. Спасибо.


person Gary Eberhart    schedule 08.06.2011    source источник


Ответы (1)


Вы можете изменить способ построения запроса, выполнив следующие действия:

private void showEditView() {
  driver.initialize(eventBus, AEHOME.requestFactory, editView);
  driver.edit(proxy, context);
  // Set up method invocation and callback in advance
  context.persist().using(proxy).to(new Receiver<Void>() {
    @Override
    public void onSuccess(Void response) {
      showListView();
    }
  }););
  deckPanel.showWidget(deckPanel.getWidgetIndex(editView));
}

public void saveCampaign() {
  driver.flush().fire();
}

В GWT 2.4 можно будет сохранить текущую организацию кода и использовать RequestContext.append():

public void saveCampaign() {
  // Returns the context passed to edit()
  RequestContext ctx = driver.flush();
  // append() is generic and returns the type returned by myProxyContext();
  ctx.append(requestFactory.myProxyContext()).persist().using(proxy).fire(....);
}
person BobV    schedule 09.06.2011
comment
Спасибо за отличный ответ. Теперь я лучше понимаю. Я все еще не могу получить ссылку на editProxy для обновления моей ячейки. Я попытался вернуть новый прокси из метода persist, но это сломало интерфейс ReqeustFactory. Я ожидал, что таблица ячеек автоматически обновится. Каков хороший способ обновить таблицу ячеек после редактирования, которое произошло в прокси-сервере, отображаемом таблицей ячеек? onSuccess (пустой ответ) { proxy.getAdTitle(); // прокси в этот момент имеет старые значения showListView(); } - person Gary Eberhart; 10.06.2011
comment
Самый надежный способ обновить пользовательский интерфейс — заставить ваш элемент пользовательского интерфейса прослушивать EntityProxyChange события вне общего EventBus. Когда элемент пользовательского интерфейса получает уведомление об обновлении интересующей его сущности, он должен создать собственное RequestFactory.find() (поскольку событие содержит только идентификатор) для получения необходимых данных. Это разъединение может помочь уменьшить количество перекрестных соединений между задачами в вашем коде. В GWT 2.4 использование RequestBatcher.get().find() сделает это более эффективным. - person BobV; 11.06.2011