我试图让fullCalendar JS应用程序仅在agendaView
视图上显示事件,而不是在month
视图上显示事件。
这是我目前的代码。问题是events
函数仅在初始页面加载时调用一次。根据文档(以及我使用fullCalendar的另一个站点),每次我更改视图或日期范围时,此函数都应该调用。它没有。
$('#calendar').fullCalendar({
events: function ( start, end, timezone, callback ) {
var view = $('#calendar').fullCalendar('getView');
console.log(view.name);
if(view.name == 'agendaDay') {
$.ajax({
type: 'POST',
url: 'index.php?events=true',
data: {
start: start,
end: end
},
async: true,
success: function ( data ) {
callback(data);
}
});
}
},
dayClick: function ( date, jsEvent, view ) {
if(view.name == 'month' && jsEvent.currentTarget.className.indexOf('date-disabled') <= -1) {
$('#calendar').fullCalendar('changeView', 'agendaDay');
$('#calendar').fullCalendar('gotoDate', date);
} else if(view.name == 'agendaDay') {
var check = moment(date).format('YYYY-MM-DD');
var today = moment(new Date()).format('YYYY-MM-DD');
if(check > today) {
alert(date);
}
}
},
header: {
left: 'title',
center: '',
right: 'today month,agendaDay prev,next'
},
dayRender: function ( date, cell ) {
var check = moment(date).format('YYYY-MM-DD');
var today = moment(new Date()).format('YYYY-MM-DD');
if(check <= today) cell[0].className += ' date-disabled';
}
});
我知道这是事实,因为console.log
只记录一次,month
。因此,只有在刷新页面时才会调用它,首先加载它。不是在改变应该改变的观点时。
答案 0 :(得分:1)
我错过了lazyFetching
选项。这必须是v2中的一个新选项,因为我没想到它。
http://arshaw.com/fullcalendar/docs/event_data/lazyFetching/
我的代码是正确的。我只需要告诉fullCalendar,即可在每次更改视图和事件发生的任何其他事件时获取事件。
lazyFetching: false,
这现在适用于我的代码。