FullCalendar:删除月视图中事件的日期

时间:2014-01-27 20:04:08

标签: fullcalendar

有没有办法在月视图中删除事件的日期跨度?

我的活动从晚上9点开始,到凌晨3点结束,在月视图中显示超过2天,但我希望将它们放在一天的单元格中。我仍然可以在AgendaWeek和agendaDay视图中同时使用它们多天。

我已经尝试过在eventAfterRender中调整事件的位置和大小,但它会为跨度应该发生的其他日子创建漏洞,即。 FullCalendar仍会定位其他事件,就好像发生了一天。如果我要去那条路,我将不得不做所有事情的整个位置和大小计算。

我可以在月视图中更改事件的实际开始和结束日期时间值,但在进入其他视图时我将不得不再次更新它们。

有一种简单的方法吗?我错过了什么吗?

由于

2 个答案:

答案 0 :(得分:1)

我挖掘了FullCalendar的内部结构,并弄清楚如何使用段来计算事件的位置,大小和日期跨度。我想如果我可以在计算它们的大小之前更改一些段值,我可以完全按照我的需要进行操作。我在FullCalendar中添加了一个新事件,以便能够转换这些段:

--- a/fullcalendar.js   Mon Jan 27 14:22:35 2014 -0500
+++ b/fullcalendar.js   Mon Jan 27 16:11:45 2014 -0500
@@ -5196,6 +5196,9 @@
        var html;
        var elements;

+       // call the trigger with the segments
+       trigger('segmentTransform', this, segments);
+
        // calculate the desired `left` and `width` properties on each segment object
        calculateHorizontals(segments);

我在需要时使用了这个新事件来转换细分。生成的代码如下所示:

// In my Full Calendar options
segmentTransform: function(segments, view) {
    if (view.name == 'month') {
        var curEvents = {};
        var segmentsToRemove = [];
        for (var i in segments) {
            var segment = segments[i];
            var eventId = segment.event.id;

            if (eventId in curEvents) {
                segmentsToRemove.push(i);
                continue;
            }
            curEvents[eventId] = true;

            if (segment.leftCol != segment.rightCol) {
                segment.rightCol = segment.leftCol;
            }
            segment.isEnd = true;
        }

        segmentsToRemove.reverse();
        for (var i in segmentsToRemove) {
            var indexToRemove = segmentsToRemove[i];
            segments.splice(indexToRemove, 1);
        }
    }
}

这是针对1.6.4版本的

答案 1 :(得分:0)

你需要准时检查。如果时间延长到第二天。将它传递到当天上午1​​1:59,然后将其传递给fullcalendar,并在标题中显示事件的实际时间。