Я думаю, что вы на правильном пути, делаете всплывающее окно автономным и сохраняете только один его экземпляр, если можете помочь.
Что касается деталей редактора, что не имеет смысла?Общая идея заключается в том, что вы можете создать драйвер один раз, инициализировать его всплывающим окном (реализующий редактор), а затем вызывать edit для драйвера каждый раз, когда вы готовы отобразить его с новой моделью.
Обычно я заканчиваюс чем-то вроде (при условии, что класс расширяет Popup, реализует Editor и имеет внутренний драйвер)
public MyPopup() {
//uibinder or other layout
this.driver = GWT.create(Driver.class);
driver.initialize(this);
}
public void edit(MyModel model) {
driver.edit(model);
show();
}
Чтобы связать этот ответ с моим собственным подходом / предубеждениями, мне нравится установка MVP, где представление ипрезентатор - это оба интерфейса, и там, где презентатор не знает, как будет выглядеть представление.Для меня это выглядит примерно так
public interface MyModelEditorView extends Editor<MyModel> {
// this param is used in a mobile/table situation, where popups aren't as friendly
void show(AcceptsOneWidget parent);
// exposes the driver for the presenter *
SimpleBeanEditorDriver<MyModel, ?> getDriver();
void setPresenter(Presenter presenter);
public interface Presenter {
// this is the only method that is called externally
void show(AcceptsOneWidget parent, MyModel model);
// called by click handlers in the view impl, probably by @UiHandler methods
void onSaveClicked();
void onCancelClicked();
}
}
* Ведущий, вероятно, должен управлять драйвером, чтобы он мог проверять ошибки, передавать ошибки с сервера, если это необходимо, редактировать новые модели и выводить результаты.