Config.java@JsonRawValue предотвращает двойное экранирование текста JavaScript-колбэков, @JsonIgnore скрывает внутренние модели Wicket от сериализации, а @JsonProperty управляет именами полей.Семь моделей обратного вызова используют IModel<String> — абстракцию модели Wicket для динамических значений. Каждый геттер обратного вызова аннотирован @JsonRawValue, что указывает Jackson вставлять строковое содержимое модели непосредственно в вывод JSON без кавычек. Это критически важно, поскольку строки обратного вызова представляют собой тела функций JavaScript (например, function(event, delta, revertFunc) { ... }) и должны отображаться как сырой код в инициализации FullCalendar, а не как строки в двойных кавычках. Методы-сеттеры предоставляют удобство (setEventDrop(String) оборачивает в Model.of()) и расширенные возможности (setEventDropModel(IModel) для динамических моделей).
Использование IModel для скриптов обратного вызова обеспечивает динамическую генерацию скриптов — это критически важно, поскольку эти скрипты содержат URL-адреса Ajax-колбэков Wicket, которые меняются между запросами (из-за токенов защиты от кэширования и версионирования страниц). Метод setupCallbacks() в FullCalendar.java заполняет эти модели сгенерированным текстом скрипта, а механизм разрешения моделей Wicket гарантирует актуальные значения при каждом рендеринге.
Используются типы Joda-Time (LocalTime для minTime/maxTime), которые сериализуются через пользовательские сериализаторы в AbstractFullCalendar. Перечисление ColumnFormat сопоставляется с опциями формата заголовков столбцов FullCalendar для видов дня, недели и месяца.
Метод add(EventSource) возвращает this, поддерживая цепочечную конфигурацию. Несколько источников событий можно добавлять в текучем стиле: new Config().add(holidaysSource).add(meetingsSource).
| Коммит | Что изменилось |
|---|---|
868d6abb7 – ceb63e8a1 | Шесть ежегодных обновлений заголовков авторских прав. Модель конфигурации оставалась стабильной — все настройки FullCalendar, необходимые приложению, зафиксированы в этом классе, и никаких новых опций конфигурации не потребовалось сверх первоначального проекта. |