簡體   English   中英

避免FullCalendar中的事件疊加

[英]Avoid event superposition in FullCalendar

您好,我正在嘗試避免FullCalendar應用中的事件重疊。 我已經定義了eventDrop回調,以便它檢查是否有任何重疊的事件,並通過相應地更改event.startevent.end ,然后調用.fullCalendar('updateEvent', event)

這是我的代碼, moment調用是針對http://momentjs.com/docs/的 ,這是一個用於javascript的時間處理工具庫,我認為這不是問題的罪魁禍首。 如果我注釋掉行event.start = start; event.end = end 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日期設置為與overlap.end相同的Date 對象 overlap.end

您還有另一個錯誤,持續時間應為

var duration = end - start;

因為在您的方法中,它計算重疊事件的持續時間,而不是您剛剛移動的事件的持續時間

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM