如何防止jQuery完整日历进行数据库往返?

时间:2015-01-16 00:45:40

标签: jquery asp.net-mvc fullcalendar

我正在使用带有ASP.NET MVC应用程序的jQuery完整日历。我的日历全年将有600到3000个活动。我将所有事件从我的控制器返回到视图,但是当我更改几个月时,我的代码再次调用数据库。我想要只为视图中的日期调用必要的事件或重用我拥有的数据,除非有一个事件的时间戳大于上一个视图中的最大时间戳。我正在寻找最佳实践/推荐方法。如果我只在视图中使用日期的get事件,我如何告诉我的ASP.NET MVC控制器在哪些日子可见?

  • 客户端:

    $(document).ready(function(){     (文档)$ .ajaxStart($ blockUI).ajaxStop($ unblockUI。);         getCalendar(); });

    function getCalendar() {         $( “#日历”)。fullCalendar({             loading:function(bool){

            },
    
            height: 500,
    
            dayClick: function (date, allDay, jsEvent, view) {
               },
    
            eventClick: function (calEvent, jsEvent, view) {
    
    
            },
    
            dayRender: function (daysOfWeek, cell) {
                $(cell).addClass('fc-state-highlight');
    
            },
    
            header: {
                left: 'prev,next today',
                center: 'title',
    
                right: 'month,agendaWeek'
    
            },
            editable: false,
            events: function (start, end, callback) {
                // UNDONE This should not be hard set
                var qs = Math.random();
                var url = '@Url.Action(@"GetJSONCalendarEvents")';
                url += "?rand=" + Math.random();
    
                url = decodeURIComponent(url);
    
                $.getJSON(url, function (locationsArray) {
                    var result = $(locationsArray).map(function () {
                        return {
                            id: this.id,
                            title: this.title,
                            start: this.start,
                            end: this.end,
                            allDay: this.editable,
                            className: this.className,
                            EventType: this.EventType
                        };
                    }).toArray();
                    callback(result);
                });
            },
    
            eventRender: function (event, element) {
    
    
            }
        });
    

    }

1 个答案:

答案 0 :(得分:1)

您需要在初始化fullCalendar之前调用事件数据,然后将事件传递给事件。

$(document).ready(function () { $(document).ajaxStart($.blockUI).ajaxStop($.unblockUI); 

var myData;

myData = function () {
        // UNDONE This should not be hard set
        var qs = Math.random();
        var url = '@Url.Action(@"GetJSONCalendarEvents")';
        url += "?rand=" + Math.random();

        url = decodeURIComponent(url);

        $.getJSON(url, function (locationsArray) {
            var result = $(locationsArray).map(function () {
                return {
                    id: this.id,
                    title: this.title,
                    start: this.start,
                    end: this.end,
                    allDay: this.editable,
                    className: this.className,
                    EventType: this.EventType
                };
            }).toArray();
            return result;
        });



getCalendar(myData); });

function getCalendar() { $("#calendar").fullCalendar({ loading: function (bool) {

    },

    height: 500,

    dayClick: function (date, allDay, jsEvent, view) {
       },

    eventClick: function (calEvent, jsEvent, view) {


    },

    dayRender: function (daysOfWeek, cell) {
        $(cell).addClass('fc-state-highlight');

    },

    header: {
        left: 'prev,next today',
        center: 'title',

        right: 'month,agendaWeek'

    },
    editable: false,
    events: myData
    },

    eventRender: function (event, element) {


    }
});
}