Fullcalendar изменить цвет фона на праздники

На самом деле я использую этот код, чтобы установить красный фон для праздников:

dayRender: function (dayRenderInfo) {

            var date = dayRenderInfo.date;

            var datestring = date.getFullYear() + "-" + ("0"+(date.getMonth()+1)).slice(-2) + "-" + ("0" + date.getDate()).slice(-2);

            var cell = dayRenderInfo.el;



            var array_holidays = []

            $.ajax({
                type: "POST",
                async: false,
                dataType:"json",
                url: "ajax/get-holidays.php",
                data: { "anno" : date.getFullYear() },

                success: function(data, status) {

                    array_holidays = data;

                }
            });

            $.each( array_holidays , function( key, value ) {

              if ( datestring == value) {

                $(cell).css("background-color", "red");

              }

            });


        },

Мне нужен сценарий, потому что некоторые праздники, например, пасха, меняют даты каждый год. Итак, get -idays.php, дайте мне набор праздников на основе года, фактически указанного в календаре.

Он отлично работает, но не очень хорош по производительности, потому что dayRender при просмотре месяца вызывается 30-31 раз !!!

Есть ли предложения по повышению производительности?


person Giuseppe Lodi Rizzini    schedule 11.02.2020    source источник
comment
избавление от устаревшего, плохого метода async:false и перемещение $.each внутри функции success может немного помочь, тогда, по крайней мере, вызовы ajax могут выполняться параллельно.   -  person ADyson    schedule 11.02.2020
comment
Но если честно, если все, что вы делаете, это устанавливаете цвет фона, лучше просто создать отдельный источник событий для этих праздников, для всех событий которых задана опция `render: background. Подробнее об этом см. fullcalendar.io/docs/background-events. Вы уже какое-то время используете fullCalendar (я знаю, потому что вы часто задаете вопросы по этому поводу), поэтому я удивлен, что эта идея еще не пришла вам в голову.   -  person ADyson    schedule 11.02.2020
comment
@ADyson привет, нет, мне не нужно (я не хочу) использовать события для этой цели. Я использую это решение, потому что использую планировщик, сгруппированный по ресурсам. Поэтому я не могу добавлять события-праздники, потому что мне нужно дублировать (например, рождество) для каждого ресурса. Я предпочитаю устанавливать цвет в дни камеры для лучшего обзора   -  person Giuseppe Lodi Rizzini    schedule 11.02.2020
comment
Я не могу добавлять события-праздники, потому что мне нужно дублировать (например, рождество) для каждого ресурса ... ерунда. Одно событие может быть связано с несколькими ресурсами. Таким образом, вы все равно можете объявить событие только один раз. См. fullcalendar.io/docs/resources-and-events.   -  person ADyson    schedule 11.02.2020
comment
@ADyson да, я знаю, но я не хочу показывать это как событие ... я попробую ваше первое решение с ajax   -  person Giuseppe Lodi Rizzini    schedule 11.02.2020
comment
Я не хочу отображать это как событие ... поэтому я предложил показать его как событие background. т.е. это просто цвета в ячейке. Ты хоть взглянул на ссылку, которую я тебе дал? Также есть демонстрация: fullcalendar.io/docs/background-events-demo   -  person ADyson    schedule 11.02.2020
comment
@ADyson привет, спасибо, я перепутал его с другим. Для меня это хорошее решение. Благодарность   -  person Giuseppe Lodi Rizzini    schedule 12.02.2020
comment
Без проблем. Я удивлен, что после всего этого времени использования fullCalendar, вы еще не знакомы с функциями.   -  person ADyson    schedule 12.02.2020


Ответы (1)


Лучшим общим решением этого требования является создание отдельного источника событий для этих праздников, все события которого имеют установлен параметр rendering: "background". Эта опция заставит событие просто выделиться цветом на фоне периода времени, который оно охватывает, вместо того, чтобы отображаться как выделенное жирным шрифтом событие обычным способом. Конечно, вы также можете управлять цветом через свойства события.

Подробнее о фоновых событиях см. https://fullcalendar.io/docs/background-events. Здесь также есть демонстрационная версия .

person ADyson    schedule 12.02.2020