JQuery fullCalendar: проблема с измененными элементами, использующими eventAfterRender - PullRequest
0 голосов
/ 18 марта 2011

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

$(document).ready(function() {
    $("#CalendarControl").fullCalendar({
        eventAfterRender: function(event, element, view) {
            var halfHour = 60 * 30 * 1000; // in milliseconds
            if((event.end - event.start) <= halfHour){
                element.height(40);
                element.find(".fc-event-time").text($.fullCalendar.formatDate(event.start, "HH:mm") + ' - ' + $.fullCalendar.formatDate(event.end, "HH:mm"));
                element.find("A").append("<span class=\"fc-event-title\"></span>")
                element.find(".fc-event-title").text(event.title);
            }
        }
    });
})

Как вы видите, я в основном заставляю его занимать то же место, что и одночасовое событие, плюс отформатированный как таковой.

Единственная проблема в том, что теперь он может перекрывать более старое событие, так как предыдущий код с автоматическим перекрытием уже произошел (и обнаружил, что он не требуется), поэтому мне нужен способ визуализации календаря снова (С моими изменениями)

Большое спасибо.

Ответы [ 3 ]

0 голосов
/ 18 марта 2011

Вы пытались установить тайм-аут для вызова rerenderEvents?

   if((event.end - event.start) <= halfHour) {
     // ... whatever ...
     setTimeout(function() {
       $('#CalendarControl').fullCalendar('rerenderEvents');
     }, 10);
   }
0 голосов
/ 23 марта 2011

Мне указали на использование eventRender, а не eventAfterRender, который работает для меня в несколько ином контексте

Например

$(document).ready(function() {
  $("#CalendarControl").fullCalendar({
    eventRender: function(event, jqElement, view) {
      jqElement.height(40);
    }
  }
}
0 голосов
/ 18 марта 2011

Значит, получасовое событие занимает час места? Это звучит потенциально запутанно, так как похоже, что оно заканчивается через полчаса. Если вы хотите изменить размер всех событий, вы можете попробовать установить defaultEventMinutes равным 15 (что приведет к тому, что событие получаса займет два слота вместо одного) или даже 10 (так что событие получаса займет 3 слоты). Конечно, ваши часовые события также займут больше места, но это обеспечит правильное представление о ситуации тем, кто читает календарь.

Чтобы изменить поведение так, чтобы календарь с искусственно большими событиями изменился на eventAfterRender, вам потребуется изменить код проверки столкновения календаря в источнике.

Если вы хотите, чтобы ваши получасовые события действительно были часовыми событиями, вы можете позвонить updateEvent , чтобы сделать событие продолжительностью в один час после факта. Или просто измените его в своем источнике данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...