EN · DE · RU · FR · ES

#2778: CalendarResponse.java

projectforge-wicket/src/main/java/net/ftlines/wicket/fullcalendar/CalendarResponse.java Построитель ответов Java (команды FullCalendar Ajax) · projectforge-wicket/src/main/java/net/ftlines/wicket/fullcalendar/CalendarResponse.java 110 строк · 48 кода · 43 комментария · 19 пустых
Текучий API для отправки команд с сервера Wicket клиенту FullCalendar JavaScript в ответ на Ajax-вызовы. Каждый метод формирует JavaScript-вызов на основе jQuery, нацеленный на DOM-элемент календаря ($('#calendarId').fullCalendarExt("command", args...)), и добавляет его в AjaxRequestTarget Wicket. Это канал команд от сервера к клиенту для управления календарём: обновление событий, переключение видимости источников событий, удаление событий, переход к датам и очистка выделения — всё управляется серверными обработчиками событий, реагирующими на действия пользователя.

Архитектура

Шаблон построителя команд

Каждый публичный метод возвращает CalendarResponse для цепочечного вызова. Шаблон позволяет составлять несколько команд календаря в одном обработчике обратного вызова:

response.clearSelection().gotoDate(date).refetchEvents();

Базовый механизм генерирует строки JavaScript через execute(args...), который использует String.format для создания jQuery-селектора, нацеленного на Wicket-идентификатор разметки календаря, и добавляет JavaScript в AjaxRequestTarget. Вспомогательный метод q() заключает аргументы в одинарные кавычки (или выводит null для нулевых значений).

Доступные команды

Примечание по архитектуре: оптимизация одного события

Метод refetchEvent содержит комментарий TODO, признающий текущую неоптимизированную реализацию (полное обновление источника). В комментарии описана запланированная оптимизация: поиск затронутого события в клиентском буфере и обновление только этого события. Это признанное узкое место производительности для календарей с большим количеством событий.

История Git

КоммитЧто изменилось
868d6abb7ceb63e8a1Шесть ежегодных обновлений заголовков авторских прав. Набор команд и текучий API остались стабильными — словарь команд расширения FullCalendar покрывает потребности интеграции календаря, и новых команд от сервера к клиенту не потребовалось.