【问题标题】:FullCalendar: Remove day spanning for events in the month viewFullCalendar:删除月视图中事件的日期
【发布时间】:2014-02-18 20:41:41
【问题描述】:

有没有办法仅在月视图中删除事件的日期范围?

我有一些从晚上 9 点开始到凌晨 3 点结束的事件,这些事件在月视图中显示了 2 天,但我希望将它们放在一个单日单元格中。我仍然可以让它们同时在议程周和议程日视图中跨越多天。

我尝试在 eventAfterRender 中调整事件的定位和大小,但它会在应该发生跨度的其他日子造成漏洞,即。 FullCalendar 仍将定位其他事件,就好像发生了一天。如果我要走那条路,我将不得不对所有东西进行整个位置和大小的计算。

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

有没有简单的方法来做到这一点?我错过了什么吗?

谢谢

【问题讨论】:

    标签: fullcalendar


    【解决方案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

    【讨论】:

      【解决方案2】:

      您需要按时检查。如果时间延长到第二天。将其四舍五入到当天上午 11:59,然后将其传递给 fullcalendar,并在标题中显示事件的实际时间。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多