Позвольте мне начать с того, что у меня есть решение, но я не думаю, что оно элегантно.Итак, я ищу более чистый способ сделать это.
У меня EntityProxy отображается на панели просмотра.Панель представления - это RequestFactoryEditorDriver, только использующий режим отображения.Пользователь нажимает на элемент данных и открывает всплывающий редактор, чтобы редактировать элемент данных EntityProxy с несколькими битами данных, которые отображаются на панели просмотра.Когда пользователь сохраняет элемент, мне нужна панель просмотра, чтобы обновить отображение.
Я столкнулся с проблемой, потому что RequestFactoryEditorDriver потока всплывающего редактора не позволяет вам получить доступ к отредактированным данным.Драйвер использует тот же передаваемый в контексте контекст, который используется для отправки данных на сервер, однако контекст, возвращаемый из сброса, допускает Receiver<Void>
, даже если вы приведете его к типу контекста, который вы сохранили в драйвере редактора при редактировании () вызов.[ Похоже, что оно также не отправляет и событие EntityProxyChanged, поэтому я не смог прослушать это и обновить представление дисплея.- поцарапайте это - я вижу теперь, что это событие не для этого варианта использования ]
Решение, которое я нашел, состояло в том, чтобы изменить мой объект доменного имени, чтобы вернуть вновь сохраненную сущность.Затем создайте всплывающий редактор, подобный этому
editor.getSaveButtonClickHandler().addClickHandler(createSaveHandler(driver, editor));
// initialize the Driver and edit the given text.
driver.initialize(rf, editor);
PlayerProfileCtx ctx = rf.playerProfile();
ctx.persist().using(playerProfile).with(driver.getPaths())
.to(new Receiver<PlayerProfileProxy>(){
@Override
public void onSuccess(PlayerProfileProxy profile) {
editor.hide();
playerProfile = profile;
viewDriver.display(playerProfile);
}
});
driver.edit(playerProfile, ctx);
editor.centerAndShow();
Затем в обработчике сохранения я просто запускаю () контекст, полученный из flush ().Хотя этот подход работает, он не кажется правильным.[ Может показаться, что я должен подписаться на событиеменимый объект в отображаемом представлении и обновить сущность и представление оттуда.- еще раз, та же причина, что и раньше ] Также этот подход сохраняет полную сущность, а не только измененные биты, что увеличит использование полосы пропускания.
То, что я думаю, должно произойти, когда вы сбрасываетеобъект должен «оптимистично» обновить управляемую ВЧ версию объекта и запустить событие изменения прокси-объекта.Только возвращение объекта, если что-то пошло не так в сохранении.Фактическое сохранение должно отправлять только измененные биты.Таким образом, нет необходимости повторно загружать всю сущность и дважды передавать эти полные данные по сети.
Есть ли лучшее решение?