【问题标题】:Full Calendar multiple background events not rendering完整日历多个后台事件未呈现
【发布时间】:2018-05-27 10:04:05
【问题描述】:

我在 fullcalendar 中使用背景事件作为假期。我正在像这样从数据库中获取事件

 events: [
        @foreach($events as $in)
            {

                id: '{{$in["id"]}}',
                title: '{{$in["name"]}}',
                start: '{{$in["interventionTime"] or ''}}',
                end: '{{$in["interventionTime"]}}', 
                room: '{{$in["room"]}}',
                repeat: '{{$in["repeat"]}}',
                limit: '{{$in["limit"]}}',
                detail: '{{$in["detail"]}}',
                @if($in['holiday'] == 1)
                rendering:  'background',
                backgroundColor:  '#fb0b0b',
                @endif

            },
        @endforeach

一切都会好起来的。我只看到这种颜色的背景事件backgroundColor: '#fb0b0b',

但是当我尝试检测这样的背景事件时问题就开始了

   dayClick: function(date, jsEvent, view) {
        if (jsEvent.target.classList.contains('fc-bgevent')) {
            alert('You cannot create intervention on a holiday');
            return false;
        }
   }

仅检测到最后一个后台事件,其他事件不会。我很困惑背景颜色适用于每个背景事件,但rendering: 'background', 仅适用于最后一个事件。 请帮忙。

【问题讨论】:

  • if (jsEvent.target.classList.contains('fc-bgevent')) { alert('holiday); }。你在哪里运行这段代码? jsEvent 代表什么?目前还不清楚。另外,您实际上想达到什么目的?这可能不是最好的方法。
  • 也许它不是最好的方法。我正在努力让一些日子成为假期。完整日历中没有选项可以做到这一点。所以我正在创建一个背景事件,让它成为一个假期。那个 JsEvent 来自这个dayClick: function(date, jsEvent, view) { if (jsEvent.target.classList.contains('fc-bgevent')) { alert('You cannot create intervention on a holiday'); return false; } }

标签: jquery laravel fullcalendar


【解决方案1】:

所以您试图阻止用户创建与您的背景事件重叠的事件?

如果是这样,那么首先,不要使用dayClick 来创建事件 - 这应该通过处理“select”回调来完成,该回调会检测用户选择并允许他们在日历上拖动鼠标以指示特定他们希望事件发生的时间段。见https://fullcalendar.io/docs/selection/select_callback/

这样做后,您可以通过设置selectOverlap 选项轻松阻止用户在后台事件或任何其他事件之上添加事件:

selectOverlap: false

如果您希望允许与其他事件重叠,但不允许与背景事件重叠,那么您可以在此处放置回调,而不是简单地 false

selectOverlap: function(event) {
   return event.rendering !== 'background';
}

对于每个与用户选择重叠的事件运行一次,并在允许选择继续之前检查被重叠的事件不是背景事件。

与您的方法相比,这里的优势在于它使您可以访问实际事件object,而不是渲染它的 HTML 元素,因此您可以检查它的所有属性,包括“渲染”一个告诉你它是否是背景事件。

详情请见https://fullcalendar.io/docs/selection/selectOverlap/

【讨论】:

  • 不工作。我需要的是一种检测背景事件的方法。不幸的是,此代码jsEvent.target.classList.contains('fc-bgevent') 仅检测到日期框的一部分。假设如果我点击框的底部,那么这将检测背景事件,但如果我点击日期框的上方,那么它不会检测到背景类c-bgevent
  • “不工作”是什么意思?错误?意外行为?您是否设置了selectable: true 以允许用户选择日历区域? (fullcalendar.io/docs/selection/selectable)。你以前的做法不可靠,不推荐。如果您正确配置,此方法起作用。
  • 我们感兴趣的,您是通过我的建议还是其他方式来管理它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-05
  • 1970-01-01
  • 2020-07-15
  • 1970-01-01
相关资源
最近更新 更多