GWT-EXT - Каков наилучший способ для виджетов для определенной ContentPanel после события? - PullRequest
0 голосов
/ 21 сентября 2008

первый пост не делай мне больно :) 1001 *

Я использую BorderLayout с обычными панелями Север, Запад, Центр, Юг. На Запад ContentPanel у меня есть Tree. Если происходит событие (OnClick), я хочу, чтобы в Center ContentPanel.

отображалось определенное диалоговое окно.

Какой лучший способ для меня это сделать? В настоящее время я использую функцию с именем returnPanel(), которая возвращает центр ContentPanel. В обработчике событий я вызываю эту функцию (MainWindow.returnPanel().add(myDialog)).

1 Ответ

1 голос
/ 21 сентября 2008

Способ, которым вы делаете это, интуитивно понятен и работает, но он начнет вызывать ад, когда приложение растет, потому что различные части приложения сильно связаны. Решения этой проблемы - шаблон проектирования MVC и шаблон проектирования наблюдателя .

В идеале, используя шаблон MVC, вы не хотите, чтобы какой-либо виджет «знал» о любом другом виджете. Существует только класс, который знает все виджеты, который является контроллером. Каждый раз, когда один виджет должен сообщать / сигнализировать другому виджету, он сообщает об этом классу Controller, который соответствующим образом передает сообщение соответствующему виджету. Таким образом, два виджета развязаны, и один может измениться, не нарушая другой. Вы можете захотеть использовать перечисление для перечисления всех возможных действий, на которые должен ответить контроллер.

Если ваш виджет должен вызывать только Контроллер при возникновении события, вы можете просто вызвать метко названный (статический) метод для него и покончить с этим. Однако, как только несколько других классов должны быть проинформированы о событии, вам лучше использовать шаблон Observer, который позволяет сигнализировать о нескольких других классах без изменения вашего класса. Он просто вызывает notifyPObservers () в eventHandler и все. Сколько слушателей и какого они типа, не имеет значения. Таким образом, вы также отделяете класс от его слушателей. Даже если только Контроллер слушает, может быть целесообразно использовать шаблон, поскольку он четко отделил код «обратного вызова» от другого кода в классах.

Кстати, это не имеет ничего общего с GWT или даже с Java в частности.

...