В документации GWT
есть руководство по использованию шаблона MVP
здесь. В этом примере есть два представления, и каждое заменяет другое в соответствии с действием пользователя.
В этих довольно простых представлениях было не очень больно втиснуть все виджеты, которые есть в view
, только в один единственный класс (view
). Но для сложного view
нужно создать отдельные view
для компонентов (с соответствующим presenter
для каждого такого компонента view
), а затем объединить эти view
в общие view
(это объединенное view
может иметь или не иметь отдельного объединенного presenter
, поскольку все под-представления уже имеют соответствующие presenters
). В чем-то похоже на создание отдельных виджетов в отдельных классах, которые расширяют Composite
, вызывают для них initWidget
и используют их как mainPanel.add(new subPanel())
на главной панели.
Так возможно ли это сделать в шаблоне MVP
в GWT
?
1 ответ
Нет, если вы сделаете это весь груз DOM
за один выстрел, даже если вы поместите внутри условия if else
.
При создании больших приложений с GWT
использование MVP и разделения кода является обязательным - в противном случае все приложение (т. е. пакет JavaScript) загружается одним фрагментом на начальном загрузка приложения, что является хорошим рецептом для разочарованных пользователей!
Используя стандартный MVP, вы можете
Isolate of User Interface from Business tier
Easily interchangeable Views (user interfaces)
Ability to test all code more effectively
Я полагаю, вы ожидаете, как показано ниже
public class MainPageView extends ViewImpl implements MainPagePresenter.MyView {
@UiField
public HTMLPanel mainMenuPanel;
@UiField
public HTMLPanel mainContentPanel;
@UiField
public HTMLPanel mainFooterPanel;
.
.
.
.
.etc
Да, вместо панелей, как показано выше, вы также можете использовать классы, внутри которых есть элементы.
Обновить:
В mainMenuPanel
вы можете добавить свой класс, например mainMenuPanel.add (new MyheaderClass ()). Где MyheaderClass
расширяет Panel
или Widget
. Таким образом, все элементы в классе добавляют к mainMenuPanel
Внутри вашего класса MyheaderClass
вы можете добавить labels
, buttons
... и т. Д., Используя this.add(mybutton)
.. и т. Д.
initWidget
). Сами эти классы содержат несколько других виджетов, которые также определены в отдельных классах, и это каскадирование продолжается на нескольких уровнях. Итак, вместо панелей или виджетов, определенных в отдельных классах, могу ли я заменить их представлениями и другим соответствующим классом презентатора?
initWidget
и добавьте их в родительскую панель, например parentPanel.add(new subPanel())
. Сама эта parentpanel
может быть субпанелью, поэтому после вызова initWidget
ее тоже можно добавить к своей родительской панели, например headPanel.add(new parentPanel())
. Но теперь у нас есть представления вместо панелей. Эти панели содержали события в одном классе, здесь представления содержат только виджеты, а события передаются их ведущему. Как добавить сейчас?
subView1' which is tied to presenter
subViewPresenter1 . Similarly for
subView2` и subView3
. Теперь я хочу добавить эти три, чтобы сказать родительский вид nestedViews
. Это представление является просто контейнером, у него не обязательно должен быть ведущий, так как все подпредставления имеют докладчиков, которые заботятся о своих событиях. Как мне теперь добавить эти три дополнительных представления к этому родительскому представлению?
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.