В событии FullCalendar dayClick я могу получить события, которые уже существуют на нажатой дате?

В событии FullCalendar dayClick я могу получить события, которые уже существуют на нажатой дате?

http://arshaw.com/fullcalendar/docs/mouse/dayClick/

Позвольте мне объяснить немного о своем проекте, который я пишу простому php сайту, которые позволяют пользователю добавлять/редактировать событие на календаре.

  • Только единственное событие может добавить к дате.
  • Если пользователь нажмет на пустую дату, то всплывающее окно события New покажет (я использую dayclick событие).
  • Если пользовательская дата щелчка с существующим событием, всплывающее окно события Edit покажет (я использую eventclick событие).

Проблема состоит в том, когда пользовательский щелчок за пределами области события (верхняя область или нижняя область) даты с существующим событием, она повышает dayclick вместо eventclick. Как я могу инициировать eventclick событие и пропустить dayclick событие, если существует существующее событие на дате?

12
задан Leniel Maccaferri 18 May 2013 в 04:51
поделиться

1 ответ

Ваши события хранятся на стороне клиента или на стороне сервера? Если на стороне клиента, это должно работать специально, если вы хотите, чтобы событие произошло в это время щелчка:

$('#calendar').fullCalendar({
    dayClick: function(date, allDay, jsEvent, view) {
            $('#calendar').fullCalendar('clientEvents', function(event) {
                if(event.start <= date && event.end >= date) {
                    return true;
                }
                return false;
            });
    }
});

Это даст события, которые перекрывают время щелчка и сохраняются на стороне клиента. В интервале на весь день будут перекрываться все события этого дня.

Если вы хотите, чтобы все события происходили непосредственно в эту дату, независимо от того, был ли выбран слот allDay или временной интервал.

$('#calendar').fullCalendar({
    dayClick: function(date, allDay, jsEvent, view) {
            if(!allDay) {
                // strip time information
                date = new Date(date.getFullYear(), date.getMonth(), date.getDay());
            }
            $('#calendar').fullCalendar('clientEvents', function(event) {
                if(event.start <= date && event.end >= date) {
                    return true;
                }
                return false;
            });
    }
});

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

РЕДАКТИРОВАТЬ Если вы совершаете поездку туда и обратно или пытаетесь получить информацию другими способами

$('#calendar').fullCalendar({
    dayClick: function(date, allDay, jsEvent, view) {
            var startDate = new Date(date.getFullYear(), date.getMonth(), date.getDay(), 0, 0, 0).getTime();
            var endDate = new Date(date.getFullYear(), date.getMonth(), date.getDay(), 23, 59, 59).getTime();
            var cache = new Date().getTime();
            $.getJSON("/json-events.php?start="+startDate+"&end="+endDate+"&_="+cache,
                function(data) {
                    // do stuff with the JSOn data
                }
    }
});

И если вы не хотите, чтобы это возвращалось, вы также можете посмотреть, что происходит, скажем, в refetchEvents в fullCalendar .js. Если вы не против отклониться от ствола fullCalendar, вы можете где-нибудь сохранить извлеченные события, чтобы не выполнять кучу манипуляций с DOM (в зависимости от количества событий, поскольку они становятся большими, что может стать громоздким).

18
ответ дан 2 December 2019 в 06:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: