fullCalendar仅在agendaView上显示事件

时间:2014-08-15 16:55:18

标签: fullcalendar

我试图让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。因此,只有在刷新页面时才会调用它,首先加载它。不是在改变应该改变的观点时。

1 个答案:

答案 0 :(得分:1)

我错过了lazyFetching选项。这必须是v2中的一个新选项,因为我没想到它。

http://arshaw.com/fullcalendar/docs/event_data/lazyFetching/

我的代码是正确的。我只需要告诉fullCalendar,即可在每次更改视图和事件发生的任何其他事件时获取事件。

lazyFetching: false,

这现在适用于我的代码。