Как фильтровать события в новой версии 5 Fullcalendar.io
версия 4 имелаeventRender
и было довольно легко визуализировать событие или нет, поскольку все, что вам нужно было сделать, это вернутьnull
с версией 5 (в настоящее время на бета-версии 4) это событие было заменено на eventContent
а также eventClassNames
но я изо всех сил пытаюсь воспроизвести ту же идею, поэтому я могу легко отображать ресурсы с событиями и без них на временной шкале
в руководстве по обновлению говорится:
eventContent
- если вы внедрили контент DOM через eventRender. Однако вы не можете отменить рендеринг, вернув false. Вместо этого прикрепилdisplay:'none'
свойство на входе события.
но если в этом случае я это сделаю, оно все равно покажет событие:
eventContent: (arg) => {
arg.event.display = 'none'
}
что мне не хватает? Что мы должны вернуть / настроить, чтобы событие больше не отображалось?
Я также пробовал
eventContent: (arg) => {
return { display: 'none' }
}
но все, что он делает, это скрывает содержимое самого события, не удаляет событие, и я получаю событие "frame"
4 ответа
Хотя здесь обсуждалось возможное решение, вы также можете использовать новыйeventClassNames
метод:
eventClassNames(args) {
return args.extendedProps.visible ? "" : "event-hidden";
}
затем определите правило CSS
.event-hidden {
display: none;
}
У меня была такая же проблема. Мне удалось скрыть само событие (поле), изменив атрибут "display".
eventContent: function(info) {
var event = info.event;
event.setProp('display', 'none');
},
Вы можете использовать новый batchRendering
функция, чтобы сделать это, например.
vm.rerenderEvents = ->
vm.calendar.batchRendering ->
vm.calendar
.getEvents()
.forEach (event) ->
visible = checkFilters event
if not visible
event.setProp 'display', 'none'
else
event.setProp 'display', 'auto'
return
return
return
В руководстве по обновлению теперь упоминается:
eventContent - если вы внедрили контент DOM через eventRender. Однако вы не можете отменить рендеринг, вернув false. Вместо этого перед выполнением eventContent убедитесь, что для свойства display вашего объекта события установлено значение "none". Вы можете сделать это динамически, установив event.setProp ('display', 'none').
Итак, две части:
- установка свойства выполняется с помощью
event.setProp('display','none')
,event.display = none
не будет работать - это нужно сделать до
eventContent
, так напримерeventDidMount
eventDidMount: function(info) {
if (...) {
info.event.setProp('display','none')
}
}