Вызов метода GWT Composite из другого Composite - PullRequest
3 голосов
/ 20 июля 2010

Я новичок в GWT и пытаюсь сделать простое приложение (например, небольшую версию fmylife).До сих пор я создавал компоновку, которая загружает факты, и другую компоновку, которая имеет форму для отправки новых фактов (у этого есть метод загрузки, который очищает список и заполняет снова).

У меня есть кнопка, которая при нажатии на нее показывает окно с формой.Эта форма используется для добавления новых фактов.Но я хочу обновить главную страницу, когда Факт добавлен правильно, и закрыть это окно.

Как мне это сделать?Должен ли я передать какой-то обратный вызов в форму Window?

Редактировать: Я недостаточно хорошо выразил, Window это DialogBox, предоставленный smartGWT .

Ответы [ 4 ]

2 голосов
/ 20 июля 2010

Посмотрите на События и шину событий .

Вы также можете посмотреть это видео для лучшего объяснения.

1 голос
/ 20 июля 2010

Конечно, а почему нет?Передайте обратный вызов с помощью некоторого метода, такого как onSave, в композит, содержащийся в DialogBox.Спроектируйте поток таким образом, чтобы композит DialogBox всегда редактировал модель фактов, и он не знал, создает ли она новую модель фактов или редактирует существующую.Позвольте DialogBox вызвать onSave, используя обратный вызов, когда пользователь отправляет всплывающее окно.

Храните логику CRUD структуры данных сбора фактов вне компоновки DialogBox.

0 голосов
/ 20 июля 2010

Согласовано с решениями DialogBox и PopupPanel выше.Однако, если вы все еще хотите использовать Window, на ум приходит следующее решение:

Расширьте Window и предоставьте хуки для значений, которые вы хотите вернуть.Затем, когда вы создаете новый CustomWindow, вызовите метод addWindowCloseHandler, чтобы получать уведомления, когда CusomWindow закрывается.В этом случае получите нужные вам значения и дайте окну закрыться.Затем выполните асинхронный вызов, чтобы обновить главную страницу.

0 голосов
/ 20 июля 2010

Вы должны использовать DialogBox или PopupPanel вместо открытия нового окна (большинство современных браузеров предпочитают открыть новую вкладку в любом случае). Таким образом, вы не покинете страницу (в этом весь смысл AJAX, верно?), Вы просто наложите поверх него новый виджет, а затем при «отправке» он будет скрывать / уничтожать себя и добавлять новый факт (без перезагрузки всей страницы).

...