javascript - "Uncaught TypeError: Cannot read property ' 将重复事件添加到数据库时克隆 ' of undefined"

标签 javascript jquery ajax fullcalendar recurring-events

出于某种原因,当我尝试使用 $('#calendar').fullCalendar 使用最近一组重复事件更新日历时,出现“未捕获类型错误:无法读取未定义的属性‘克隆’” ('updateEvent',events[i]); 在我的 ajax 的成功调用中(检查最后一个代码片段)

这是我的函数调用的结构:

我在 eventReceive 函数内调用 addEventSource,因此当将元素拖动到日历时,该元素将被删除并添加重复事件:

eventReceive : function(event) {
    ...
     $('#calendar').fullCalendar('removeEvents', event._id);
    $('#calendar').fullCalendar(  'addEventSource',function(start, end, status,  callback) {    

在 addEventSource 中,我只需检查事件在一周中的哪一天被删除,并为同一天接下来的几天复制该事件:

$('#calendar').fullCalendar( 'addEventSource',function(start, end, status,  callback) {
  var start_date = event.start.toDate();
  var stop_date = new Date("2017-01-15"); // for testing purposes to avoid filling up database with too many entries
  var events = [];
  ...
    for (loop = start_date.getTime(); (loop <= end._d.getTime()) && (loop <= stop_date); loop = loop + (24 * 60 * 60 * 1000)) { 
       ...
       var test_date = new Date(loop);
       var momentOfDate = moment(test_date);
       var formattedStart = momentOfDate.format("YYYY-MM-DDTHH:mm:ss");
       ...
        if (test_date.getDay() == event.start.weekday()) {
              events.push({
                                title: event.title,
                                start: formattedStart,
                                end: // same procedure for end as start
                                parent_id : // some variable
                                id: // some unique variable,
                                tDuration : event.tDuration,
                                dow : ''
          });
        } //if          
     } // for loop
     callback(events);

回调后,我们希望将新创建的事件添加到数据库中。这工作得很好,如果我排除“$('#calendar').fullCalendar('updateEvent',events[i]);”,我添加的每个重复事件都在数据库中函数调用,但随后我需要重新加载页面,以便在我移动事件时更新数据库。这是 ajax 调用:

for (i = 0 ; i < events.length-1 ; i++) {
        var duration = events[i].tDuration;
        $.ajax({
            url: 'process.php',
            data: 'type=new&title='+events[i].title+'&startdate='+events[i].start+'&duration='+duration+'&enddate='+events[i].end+'&dow='+events[i].dow,
            type: 'POST',
            dataType: 'json',
            success: function(response){
                //location.reload(); WORKS but requires reload
                  $('#calendar').fullCalendar('updateEvent',events[i]); // generates typeError but needed in order modify recurring events

                            },
            error: function(e){
                    alert('error');
                    console.log(e.responseText);
                }
            })
        }

遇到这种情况我该怎么办?我可以毫无问题地添加单个事件并执行相同版本的 ajax,而不会出现任何错误,当我尝试访问自己的“事件”数组中的事件而不是使用在 eventReceive 函数中作为参数传递的事件时,就会出现问题称呼。然而,由于我要添加多个事件,所以我有点被迫按照我看起来的方式来做。

单人事件代码(有效!):

 eventReceive : function(event) {
            var title = event.title;
            var start = event.start.format();
            var end = event.end.format();
            var duration = event.tDuration;
            var dow ='';
            $.ajax({
                url: 'process.php',
                data: 'type=new&title='+title+'&startdate='+start+'&duration='+duration+'&enddate='+end+'&dow='+dow,
                type: 'POST',
                dataType: 'json',
                success: function(response){
                    event.id = response.eventid;
                    $('#calendar').fullCalendar('updateEvent',event);
                },
                error: function(e){
                    alert('error');
                    console.log(e.responseText);
                }
            });

删除了尝试1,因为我自己找到了一个有效的解决方案

最佳答案

当您调用updateEvent时,事件必须是事件的原始事件对象,而不仅仅是重构的对象。

因此,您要么必须获取原始事件并更新其属性,然后调用 updateEvent,要么您可以调用 removeEvents传递id然后调用renderEvent从数组传递事件。

关于javascript - "Uncaught TypeError: Cannot read property ' 将重复事件添加到数据库时克隆 ' of undefined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41207618/

相关文章:

javascript - 如何使用ajax填充javaScript数组

c# - 试图让 asp.net ajax 下拉列表自动完成扩展器的一个简单示例工作!

javascript - 将链接移动到 div 末尾

javascript - 清除选择选项并将其重置为默认值在 Jquery 中不起作用

ios - Trigger.io 在后台保持长轮询连接打开

JavaScript - onCopy 事件和模糊

javascript - HighCharts (HighMaps) - 调整大小的函数

javascript - AngularJS 模型逻辑放在哪里?

javascript - 附加外部 js 和 css 文件的页面速度

javascript - 使用 jQuery 将一个选择框中的选项元素替换为另一个选项元素?