2

AJAX呼び出しを行うjavascript関数を介して取得しているイベントを表示するためにFullCalendarを使用しています。これは、ViewMore オプションを含めて、特定の日に戻すイベントの数を制限するために行われます。

lazyFetching をオフにすることで、FullCalendar がページで発生するすべてのイベントに対して再レンダリングを行うように見えます。これにより、毎回新しい AJAX 呼び出しが行われます。

FullCalendar がこれらの不要な AJAX 呼び出しを行わないようにするにはどうすればよいですか?

以下は、fullCalendar を初期化するためのコードです。ありがとう!

    $('#calendar').fullCalendar({
    defaultView: 'basicWeek',
    theme: true,
    isRTL: isRightToLeft,
    contentHeight: 800,
    weekends: true,
    header: {
        left: 'prev,next today',
        center: 'title',
        right: 'month,basicWeek,basicDay'
    },
    lazyFetching: false,
    columnFormat: {
        month: 'ddd',
        week: 'ddd ' + shortMonthDayPattern,
        day: 'dddd ' + shortMonthDayPattern
    },
    titleFormat: {
        month: yearMonthPattern,                             // September 2009
        week: "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", // Sep 7 - 13 2009
        day: longDatePattern                  // Tuesday, Sep 8, 2009
    },
    dayClick: function (date, allDay, jsEvent, view) {
        if (view.name != 'basicDay') {
            $('#calendar').fullCalendar('changeView', 'basicDay');
            $('#calendar').fullCalendar('gotoDate', date);
        }
    },
    eventClick: function (event, jsEvent, view) {
        if (event.id === "viewMore") {
            $('#calendar').fullCalendar('changeView', 'basicDay');
            $('#calendar').fullCalendar('gotoDate', event.start);
        }
        else {
            navigateBackboneCal(event.id);
        }
    },
    editable: false,
    loading: function (isLoading) {
        if (isLoading) {
            $('.fc-content').block({
                message: null,
                css: { top: '10' }
            });
        }
        else {
            $('.fc-content').unblock();
        }
    },
    viewDisplay: function (view) {

    },
    events: function (startDt, endDt, callback) {
        var maxEvents = 0;
        var view = $('#calendar').fullCalendar('getView');
        if (view.name === 'month')
            maxEvents = 5;
        else if (view.name === 'basicWeek')
            maxEvents = 30;

        var events = [];
        $.ajax({
            url: '/GetCalendarEvents',
            type: 'POST',
            data: { start: Math.round(startDt.getTime() / 1000), end: Math.round(endDt.getTime() / 1000), maxEvents: maxEvents },
            error: function (error) {
                alert('There was an error while fetching events!');
                $('.fc-content').unblock();
            },
            success: function (result) {
                if (result.viewMoreEvents)
                    events = $.merge(result.events, result.viewMoreEvents);
                callback(events);
            }
        });


    }
});
4

0 に答える 0