完整日历updateEvent。无法读取属性'克隆'未定义的

时间:2017-10-30 15:58:23

标签: javascript jquery fullcalendar

我正在使用FullCalendar并尝试使用模态更新事件。当我尝试更新活动时,我收到了无法阅读的内容' clone'未定义的。

我正在使用clientEvents方法,如文档中所述

  

事件必须是事件的原始事件对象,而不仅仅是重建的对象。原始事件对象可以通过回调(例如eventClick)或clientEvents方法获得。

获取原始事件,但是,当我提交时,我仍然会收到此错误。

这是我的代码:

initializeFullCalendar: function () {

        var loc = $('#locationCodes').val();

        $('.autocomplete').keypress(function (key) {

            if (key.charCode == 32 && $('.autocomplete').val().length >= 1) { return true };
            //  if (key.charCode == 92 || key.charCode == 47 || key.charCode < 65) return false;
        });

        $(document).tooltip({
            track: true,
            hide: { effect: "explode", duration: 300 }
        });

        $('#calendar').fullCalendar({
            header: {
                left: 'prev,next today',
                center: 'title',
                right: 'month,basicWeek,basicDay'
            },
            selectable: true,
            selectHelper: true,
            dayclick: function(date){

            },
            select: function (date, start, end) {
                if ($('#job').attr('class') === 'XXX') {
                    EMP.calendarPopup(date, start, end);
                } 
            },
            eventSources: [
                {
                    url: '/Home/getAllEvents/',
                    data: { Locations: loc },
                    type: 'POST'
                }

            ],
            eventClick: function (event, element, date) {


                EMP.editCalendarPopup(date, event);



            },
            height: 350,
            defaultView: 'basicWeek',
            editable: true,
            eventLimit: true, // allow "more" link when too many events
            eventRender: function (data, element) {


                var start = moment(data.start._i).format('LT');
                var end = moment(data.end._i).format('LT');               
            }
        });
    },

    editCalendarPopup: function (date, event) {

        $('.calendar-popup').addClass('active edit');

        var event_date = event.start._i.split("T")[0];

        var start = event.start._i.split("T")[1]
        var end = event.end._i.split("T")[1];

        start = EMP.convert12hr(start);
        end = EMP.convert12hr(end);

        var startTime = start.split(' ')[0];
        var startMod = start.split(' ')[1];
        var endTime = end.split(' ')[0];
        var endMod = end.split(' ')[1];


        $('#date').val(event_date);

        $('#calendar-event').val(event.title);
        $('#calendar-custodian').val(event.cust);
        $('#calendar-start').val(startTime);
        $('#startampm').val(startMod)
        $('#calendar-end').val(endTime);
        $('#endampm').val(endMod);

        $('#hiddenEvent').val(event.title);
        $('#hiddenCustodian').val(event.cust);
        $('#hiddenStart').val(event.start._i);
        $('#hiddenEnd').val(event.end._i);
        $('#hiddenId').val(event._id);


    },

    editCalendarAjax: function() {

        var event = $("#calendar").fullCalendar('clientEvents');

        var hiddenId = $('#hiddenId').val();

        event = $.grep(event, function(e){return e._id === hiddenId});

        event = event[0];


        var event_date = $('#date').val();


        var title = $('#calendar-event').val();
        var cust = $('#calendar-custodian').val();

        var start = $('#calendar-start option:selected').val();
        var end = $('#calendar-end option:selected').val();
        var startampm = $("#startampm option:selected").val();
        var endampm = $("#endampm option:selected").val();
        start = start + " " + startampm;
        end = end + " " + endampm;

        start = EMP.convert24hr(start);
        end = EMP.convert24hr(end);

        var locCode = $('.location').attr('id');

        var date_start = event_date + "T" + start;
        var date_end = event_date + "T" + end;

        if (title) {
            event = {
                title: title,
                start: date_start,
                cust: cust,
                end: date_end
            };
            $('#calendar').fullCalendar('updateEvent', event);
        }

        var origEvent = $('#hiddenEvent').val();
        var origCust = $('#hiddenCustodian').val();
        var origStart = $('#hiddenStart').val();
        var origEnd = $('#hiddenEnd').val();

        item = {};

        item["title"] = title;
        item["cust"] = cust;
        item["start"] = date_start;
        item["end"] = date_end;
        item["locCode"] = locCode;
        item["origEvent"] = origEvent;
        item["origCust"] = origCust;
        item["origStart"] = origStart;
        item["origEnd"] = origEnd;


        $.ajax({
            type: "POST",
            url: "/Home/updateCalendar",
            data: item,
            success: function () {
                console.log('success!');
            },
            error: function (xhr, ajaxOptions, thrownError) {
                window.alert("Please click here to refresh your session");
                console.log('error')

            }
        });


        $('#calendar').fullCalendar('unselect');

        EMP.togglePopups();


    },

1 个答案:

答案 0 :(得分:2)

问题是我使用的是旧版FullCalendar。更新后,我停止了收到错误。

我必须改变的另一件事是:

if (title) {
     event = {
            title: title,
            start: date_start,
            cust: cust,
            end: date_end
        };
        $('#calendar').fullCalendar('updateEvent', event);
    }

到此:

if (title) {
            event.title = title;
            event.start = date_start;
            event.cust = cust;
            event.end = date_end;

            $('#calendar').fullCalendar('updateEvent', event); // stick? = true
        }

因为我覆盖了我的活动。现在一切都有效。