Разговор между панелями GWT с использованием макета UIBinder - PullRequest
1 голос
/ 19 февраля 2010

Новое для GWT здесь ...

Я использую подход UIBinder для компоновки приложения, в некоторой степени в стиле образца GWT Mail. Приложение начинается с DockLayoutPanel, добавленного в RootLayoutPanel в методе onModuleLoad (). DockLayoutPanel имеет статический север и статический юг, используя пользовательский виджет центра, определенный как:

public class BigLayoutWidget extends ResizeComposite {
...
}

Этот пользовательский виджет размечен с использованием BigLayoutWidget.ui.xml, который, в свою очередь, состоит из TabLayoutPanel (3 вкладки), первая из которых содержит SplitLayoutPanel, разделенную на WEST (Shortcuts.ui.xml) и CENTER (Рабочая панель). ui.xml). Ярлыки, в свою очередь, состоят из StackLayoutPanel с 3 стеками, каждый из которых определен в своем собственном файле ui.xml.

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

Несколько вопросов ...

  1. Является ли ResizeComposite правильным типом класса для этого? Я следую подходу из примера Mail для TopPanel, MailList и т. Д., Так что может и нет?
  2. Как я могу заставить эти клики манипулировать содержимым панелей, на которых они НЕ находятся?
  3. Слушатели больше не рекомендуются для обработки событий? Мне показалось, что где-то во время компиляции я увидел, что ClickHandlers используются в наши дни, а подход «подписки» для прослушивателя кликов устарел (в основном я использую аннотации @UiHandler)
  4. Есть ли простой способ получить указатель на определенные элементы в моем приложении / странице? (Применение поля «ID» в файле UI.XML создает предупреждение об устаревании). Я ищу что-то вроде document.getElementById (), который поможет мне справиться с конкретными элементами. Если это существует, как я могу установить дескриптор / идентификатор элемента и как я могу затем вызвать этот элемент по имени / идентификатору?

Обратите внимание, что у меня сама раскладка довольно хорошо приколочена; это взаимодействие между одной модульной панелью ui.xml и другой, которую я не совсем понимаю.

Заранее спасибо.

1 Ответ

4 голосов
/ 19 февраля 2010
  1. Если вы не используете для изменения размера событий, чем просто использовать Composite
  2. То, что вы хотите, - это то, что разработчики GWT называли шиной сообщений (реализовано как HandlerManager ). Вы можете получить хорошее объяснение в широко обсуждаемой (например, презентации GWT Google Group , просто поиск по 'mvp') Рэя Райана из Google I / O 2009, которую можно найти здесь . По сути, вы «транслируете» событие на этой шине сообщений, а затем виджет, прослушивающий это событие, получает сообщение и выполняет его работу.
  3. Да, * Обработчики являются текущим способом обработки событий - использование в основном такое же, поэтому миграция не должна быть проблемой ( docs ). Они изменили его, чтобы в будущем можно было вводить пользовательские поля, не нарушая существующий код.
  4. Если вы установили id для любого элемента DOM (для виджетов я использую someWidget.getElement().setId(id), обычно в сочетании с DOM.createUniqueId()), вы можете получить его через GWT.get(String id) . Затем вы получите RootPanel, который вам нужно будет привести к нужному классу виджетов - как вы можете видеть, он может стать немного «хакерским» (что если вы измените тип виджета по этому идентификатору? Исключения, или хуже), поэтому я бы рекомендовал придерживаться MVP (см. первый пункт) и общаться через шину сообщений. Помните, однако, что иногда также полезно объединять - не все должно обрабатываться через шину сообщений:)

Суть в том, что я бы рекомендовал охватить MVP (и History ) как можно скорее - это делает разработку GWT намного проще и менее запутанной :) (из опыта я знаю, что со временем код запускается) выглядеть как кошмар, если не делить его на представление, просмотр и т. д.)

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