javascript - 避免 FullCalendar 中的事件叠加

标签 javascript fullcalendar

您好,我正在尝试避免 FullCalendar 应用中的重叠事件。我定义了 eventDrop 回调,以便它检查任何重叠事件,并通过更改 event.start 将当前移动的事件移动到重叠事件的末尾>event.end 相应地,然后调用 .fullCalendar('updateEvent', event)

这是我的代码,moment 调用用于 http://momentjs.com/docs/这是一个 javascript 的时间处理工具库,我不认为这是问题的罪魁祸首。如果我注释掉 event.start = start; 的行event.end = end,则一切正常。如果我不这样做,无论我是否调用 updateEvent,它都会以完全相同的方式中断。发生的情况是:该事件确实移动到前一个事件的末尾,但是如果我稍后尝试将事件向前移动(当天晚些时候移动到一个空白空间),则前一个事件在视觉上会延长,直到该事件的新开始当前正在修改事件。

self.collection 是一个主干集合,因此仅使用注释的 event.start= 位调用此代码会显示事件重叠,但如果我刷新页面,然后事件显示在正确的位置(不重叠)

eventDrop: function(event, dayDelta,
                    minuteDelta, allDay,
                    revertFunc, jsEvent, ui, view) {
    var start = moment(event.start);
    var end = moment(event.end);
    var overlap = self.calendar.fullCalendar('clientEvents', function(ev) {
        if( ev == event)
            return false;
        var estart = moment(ev.start);
        var eend = moment(ev.end);
        return estart.unix() < end.unix() && eend.unix() > start.unix();
    });
    if( overlap.length ) {
        overlap = overlap[0];
        var estart = moment(overlap.start);
        var eend = moment(overlap.end);
        var duration = eend - estart;
        start = eend;
        end = start.clone();
        end.add(duration);
        event.start = start.toDate();
        event.end = end.toDate();
        self.calendar.fullCalendar('updateEvent', event);
    }
    event.model.save({start: start.unix(), end: end.unix()});
},

最佳答案

好的,找到问题了。

这行内容

start = eend;

应该是

start = eend.clone();

因为将其包装在 moment 对象中并不会执行此操作,它只是保留引用,并将新移动的事件的 start 日期设置为相同Date object 作为 overlap.end

关于javascript - 避免 FullCalendar 中的事件叠加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15646086/

相关文章:

javascript - AsyncFileUpload Inside Listview Insert、Edit Itemtemplate 和 EmptyData Template 将不起作用

javascript - 带有构造函数和原型(prototype)的 Object.defineProperty

javascript - 添加固定位置后防止页面滚动到顶部

jquery - 完整日历限制议程周 View 的开始和结束时间

twitter-bootstrap - Bootstrap CSS 破坏了工具提示弹出窗口

javascript - 全日历仅在月 View 中隐藏事件

javascript - 如何在 fullCalendar 中绑定(bind)日期?

javascript - 格式化 FancyBox 的标题

javascript - 如何避免子表单在 AngularJS 中使外部表单 $dirty ?

javascript - fullCalendar + Bootstrap 选项卡故障 : not rendering events until resizing browser