Калитка и сложные Ajax-сценарии - PullRequest
4 голосов
/ 11 июня 2011

Когда на экране есть несколько взаимодействующих элементов управления Ajax, и вы хотите контролировать видимость компонентов, реагирующих на эти элементы управления (чтобы вы отображали только то, что имеет смысл в любой конкретной ситуации), вызывая target.addComponent() вручную для всего, что вы хотите обновление становится громоздким и не очень удобным для обслуживания.

В конечном итоге сеть обратных вызовов onClick и onUpdate может достичь точки, когда добавление нового компонента на экран становится намного сложнее, чем должно быть.

Каковы обычно используемые стратегии (или даже библиотеки, если такая вещь существует), чтобы избежать такого накопления сложности?

Обновление: Спасибо за ваши ответы, я нашел их все очень полезными, но я могу принять только один. К сожалению.

Ответы [ 5 ]

9 голосов
/ 13 июня 2011

В Wicket 1.5 есть шина событий. Каждый компонент имеет метод onEvent (Object payload). С помощью component.send () вы можете транслировать события, и каждый компонент может проверить полезную нагрузку (например, объект UserJoinedEvent) и решить, хочет ли он участвовать в текущем ответе Ajax. См. http://www.wicket -library.com / wicket-examples / events / для простой демонстрации.

8 голосов
/ 12 июня 2011

Вы можете добавить структурные компоненты, такие как WebMarkupContainer s, когда вы добавите это в AjaxTarget, все содержащиеся в нем также будут обновлены.Это позволяет обновлять группы компонентов в одну строку.

3 голосов
/ 16 июня 2011

Когда я создаю компоненты для страницы, я склонен добавлять их в массивы компонентов:

Component[] pageComponents = {
                  new TextField<String>("Field1"),
                  new TextField<String>("Field2"),
                  new TextField<String>("Field3")
}

Начиная с Wicket 1.5, функции добавления принимают параметры массива [1].Поэтому элементы могут быть добавлены на страницу или цель следующим образом:

add(pageComponents);
target.add(pageComponents);

Затем можно сгруппировать компоненты, на основе которых вы хотите обновить их вместе.

[1] http://www.jarvana.com/jarvana/view/org/apache/wicket/wicket/1.5-M3/wicket-1.5-M3-javadoc.jar!/org/apache/wicket/ajax/AjaxRequestTarget.html

2 голосов
/ 15 июня 2011

В настоящее время я использую какой-то модифицированный шаблон наблюдателя для имитации шины событий в Wicket 1.4.

Мои страницы действуют как наблюдаемый наблюдатель, поскольку мои компоненты не знают друг друга и используются в разныхкомбинации на нескольких страницах.Всякий раз, когда один компонент получает Ajax-событие, которое может повлиять и на другие компоненты, он вызывает на своей странице метод с объектом-событием и ajax-target.Страница вызывает аналогичный метод для всех компонентов, которые зарегистрировались для этого вида событий, и каждый компонент может на основе предоставленного объекта-события принять решение о том, должен ли он реагировать и может присоединиться к цели.

То же самое можно заархивировать с помощью посетителя калитки.Я не знаю, какой из них лучше, но я думаю, что это в основном дело вкуса.

2 голосов
/ 12 июня 2011

Ну, о скольких компонентах мы здесь говорим? Десять? Двадцать? Сотни?

До двадцати или около этого у вас может быть контроллер состояния, который контролирует, какие компоненты должны отображаться. Этот контроллер устанавливает видимое поле модели компонентов, и вы всегда добавляете все компоненты к вашим запросам, которые обрабатываются контроллером. События ajax компонентов вы просто перенаправляете в метод дескриптора контроллера.

Для действительно большого количества компонентов, которые имеют слишком большую полезную нагрузку для хорошей производительности, вы можете использовать библиотеки javascript, такие как jQuery, для демонстрации и скрытия вещей клиентом.

...