Соединение двух диалоговых окон в GWT - PullRequest
1 голос
/ 13 апреля 2010

В моем проекте GWT я пытаюсь получить его, чтобы два DialogBox могли передавать информацию друг другу. Один из них содержит MapWidget, и когда кнопка нажимается в другом DialogBox, информация о положении принимается из MapWidget этого другого DialogBox. Кто-нибудь есть какие-либо советы о том, как я должен координировать между двумя разными DialogBoxes появляются? Должен ли я обернуть код для двух в композит? Кроме того, есть ли где-нибудь пример работы с двумя диалоговыми окнами одновременно в GWT? Например, если я нажму за пределами двух полей, оба должны быть отклонены. Мне интересно, есть ли способ держать их обоих в фокусе одновременно, чтобы я мог переключаться между ними, не пропуская ни одного из них.

1 Ответ

1 голос
/ 18 апреля 2010

Обмен данными между диалоговыми окнами

По моему мнению, "правильный" способ сделать это - реализовать некую структуру MVP в приложении, чтобы докладчик управлял представлением (DialogBox es, среди прочего) и знает, как передать простые данные в представление для отображения (докладчик будет обрабатывать данные MapWidget, представление позаботится о его отображении в DOM).

Однако, если вы ищете более быстрый / более простой подход, у вас есть несколько вариантов (которые вы действительно выбираете, зависит от структуры приложения):

  1. Создайте Composite, как вы упомянули, который знает, как передавать необходимые данные туда и обратно. Имея Composite управляющий объектом данных и сообщающий двум DialogBox о том, как его отобразить, вы фактически приближаетесь к архитектуре MVP в пределах Composite.
  2. Подкласс DialogBox в класс, который содержит HandlerManager (иногда используется в качестве "Шины событий"), которая генерирует события при нажатии кнопки. Вы можете создавать события, предназначенные для передачи данных назад и вперед между двумя DialogBox (даже сделать их безопасными с помощью параметров типа). См. этот вопрос StackOverflow для получения подробной информации об использовании HandlerManager. Статья MVP, ссылка на которую приведена выше, также содержит некоторую полезную информацию об использовании шины событий .

Model-View-Presenter - это проверенный метод структурирования приложения, который дает более тестируемый код, лучшую структуру проекта и может помочь вам при принятии таких решений. Я настоятельно рекомендую проверить это, если вы еще этого не сделали.

Совместное использование функции автоматического скрытия

GWT PopupPanel (на котором основан DialogBox) предлагает метод addAutoHidePartner(Element), который описан таким образом:

События мыши, происходящие в партнере autoHide, не скрывают панель, для которой установлено значение autoHide.

Таким образом, вы можете создать два автоматически скрываемых DialogBox, которые закрываются только при нажатии за пределами их обоих (например, они не закрываются, когда вы щелкаете в любом из полей) со следующим кодом:

// Create the dialog boxes
DialogBox dbox1 = new DialogBox(true, false);
DialogBox dbox2 = new DialogBox(true, false);
// Set some visual options
dbox1.setPopupPosition(10, 10);
dbox2.setPopupPosition(200, 10);
dbox1.setAnimationEnabled(true);
dbox2.setAnimationEnabled(false);
// Set the dialog boxes' caption and content
dbox1.setHTML("Dialog Box 1");
dbox2.setHTML("Dialog Box 2");
dbox1.setWidget(new HTML("This is the first dialog box."));
dbox2.setWidget(new HTML("This is the second dialog box."));
// Making dobx2 a partner of dbox1 means clicking
// in dbox2 won't cause dbox1 to close
dbox1.addAutoHidePartner(dbox2.getElement());
// Similarly, setting dbox1 as a partner of dbox2 means
// clicking in dbox1 won't cause dbox2 to close
dbox2.addAutoHidePartner(dbox1.getElement());
// Show the dialog boxes
dbox1.show();
dbox2.show();

Вы можете взаимодействовать с любым из диалоговых окон, не закрывая другое. Пропустите соответствующий звонок на setAutoHidePartner, если вы хотите только одностороннее партнерство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...