使用FullCalendar.js在多个日历上创建事件

时间:2013-05-24 08:26:55

标签: javascript jquery closures fullcalendar

我在我的网站上使用FullCalendar javascript库来为每个员工并排显示日历。日历显示日视图,因此可以轻松查看当天的每个人日程安排。

我让所有的日历并排显示(每个都在他们自己的div中)。

我的问题是,在通过点击日历创建新活动时,始终会在页面的最后一个日历上创建活动,而不是您点击的实际日历。我觉得它与select回调函数中的闭包有关。

/*
*   Setup calendars for each sales person
*/
var d = $.fullCalendar.parseDate($("#requested_date").val());

//employee id numbers (each employee has own calendar)
var employees = new Array(445,123,999,444); 

for(i=0;i<employees.length;i++)
{
        var employeeId = employees[i];

        //clear any prevoius calendar info
        $('#calendar_' + employeeId).html("");

        calendar[employeeId] = $('#calendar_' + employeeId).fullCalendar({
            header: {
                left: '',
                center: '',
                right: ''
            },
            year: d.getFullYear(),
            month: d.getMonth(),
            date: d.getDate(),
            defaultView: 'agendaDay',
            minTime: 7,
            maxTime: 19,
            height: 650,
            editable: true,
            selectable: true,
            selectHelper: true,
            select: function(start, end, allDay) { 

                calendar[employeeId].fullCalendar('renderEvent',
                    {
                        title: "This Estimate",
                        start: start,
                        end: end,
                        allDay: allDay
                    },
                    true // make the event "stick"
                );

                calendar[employeeId].fullCalendar('unselect');
            },
            events: {
                url: 'calendar/'+employees[employeeId],
                type: 'POST',
                data: {
                        'personId': employees[employeeId],
                        'ci_csrf_token': wp_csr_value
                    },
                error: function() {
                alert('there was an error while fetching events!');
            }
        }
    });
}

由于

1 个答案:

答案 0 :(得分:2)

当您选择日历时,employeesId等于444,因此它会在最后一个日历上呈现事件,请尝试以下操作:

select: function(start, end, allDay , jsEvent ,view) { 
       $(view.element).parent().parent().fullCalendar('renderEvent',
                    {
                        title: "This Estimate",
                        start: start,
                        end: end,
                        allDay: allDay
                    },
                    true // make the event "stick"
                );

                $(view.element).parent().parent().fullCalendar('unselect');
}