Слушатель для "изменения даты" в FullCalendar?
Есть ли способ присоединить слушателя к FullCalendar, который будет срабатывать при каждом изменении текущей просматриваемой даты, т.е. если вы находитесь в режиме просмотра "Месяц", переход к следующему месяцу вызовет событие, передающее дату для первого дня месяца, и то же самое для смены недель в представлении недели, дня в дне и т.д.
Единственный открытый слушатель, который был бы близок к этому, - это обратный вызов dayClick, но это бесполезно, потому что он срабатывает только тогда, когда пользователь нажимает на фактическую дневную ячейку, а не, например, когда на панели заголовка нажимаются элементы управления Next/prev/today.
Я хочу, чтобы эта функция могла синхронизировать текущий просматриваемый месяц в FullCalendar с компонентом DateJPicker ExtJS, поэтому, если просматриваемый месяц изменяется в FullCalendar, то Datepicker обновляется, чтобы показать тот же месяц. (вспомните пользовательский интерфейс Календаря Google с его "мини-календарем" в верхнем левом углу, который является указателем даты).
Ответы
Ответ 1
Билл,
Я знаю, что этот вопрос довольно древний, но мне нужно решение и подумал, что я разместил его здесь для других. Я сам решил проблему, присоединив событие viewDisplay
к моему календарю (это событие было удалено в v2 из FullCalendar, viewRender
).
$("#calendar").fullCalendar({
viewDisplay: function (element) {
}
});
Как только у вас есть доступ к элементу, вы можете получить дату с помощью element.start
или element.visStart
. Если вы находитесь в режиме просмотра месяца, начните с первого дня месяца, который вы просматриваете, visStart даст вам первый видимый день месяца.
Ответ 2
Вот как я это сделал:
$("#calendar").fullCalendar({
viewRender: function(view, element){
var currentdate = view.intervalStart;
$('#datepicker').datepicker().datepicker('setDate', new Date(currentdate));
}
});
В представлении месяца intervalStart
вернет первый день месяца, отображаемого на FullCalendar, а не первый видимый день, который обычно является днем ближе к концу предыдущего месяца.
Ответ 3
Для FullCalendar v4 (последняя версия на момент написания) правильными обратными вызовами являются:
viewSkeletonRender (документы)
function( info )
Этот обратный вызов будет срабатывать, когда визуализируется начальный вид или когда пользователь меняет представление, но до срабатывания обратного вызова dateRender, который является обратным вызовом, когда все ячейки даты/времени были обработаны.
dateRender (документы)
function( info )
Это срабатывает после обратного вызова viewSkeletonRender, но до EventRender обратные вызовы.
Ответ 4
Для Fullcalendar V4,
document.getElementById('my-button').addEventListener('click', function() {
var date = calendar.getDate();
alert("The current date of the calendar is " + date.toISOString());
});