1

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

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

我的问题是,通过单击日历创建新事件时,该事件总是在页面上的最后一个日历上创建,而不是您单击的实际日历。我感觉这与选择回调函数中的闭包有关。

/*
*   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!');
            }
        }
    });
}

谢谢

4

1 回答 1

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');
}
于 2013-05-24T10:18:51.960 回答