1 回答

TA贡献1836条经验 获得超13个赞
您需要的更改更多地与选项卡的使用有关,而不是与 fullCalendar 3 和 5 之间的区别有关。与复选框相比,一次只能选择一个选项,因此您需要从选项卡本身找出当前打开的选项卡.
所以这是一个可行的简单想法:显示选项卡时,运行一个函数。在该函数中,调用日历的refetchEvents()
方法 。然后您可以使用日历的eventDataTransform
回调来决定该事件是否应该显示在日历上,基于哪个选项卡当前是“活动的”。这是更可取的,eventDidMount
因为它在事件呈现到日历上之前运行,而不是之后运行。
像这样的事情应该这样做:
HTML:
<div class="row">
<div class="col-md-12">
<ul class="nav nav-tabs">
<li data-tabid="1" class="nav-item"><a class="nav-link active" data-toggle="tab" href="#CalTab1" style="font-size:16px;"><b>EVENT1</b></a></li>
<li data-tabid="2" class="nav-item"><a class="nav-link" data-toggle="tab" href="#CalTab2" style="font-size:16px;"><b>EVENT2</b></a></li>
<li data-tabid="3" class="nav-item"><a class="nav-link" data-toggle="tab" href="#CalTab3" style="font-size:16px;"><b>EVENT3</b></a></li>
<li data-tabid="all" class="nav-item"><a class="nav-link" data-toggle="tab" href="#CalTabAll" style="font-size:16px;"><b>ALL</b></a></li>
</ul>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div id="calendar"></div>
</div>
</div>
脚本:
document.addEventListener("DOMContentLoaded", function () {
var calendarEl = document.getElementById("calendar");
var calendar = new FullCalendar.Calendar(calendarEl, {
initialDate: "2020-07-01",
aspectRatio: 1.8,
headerToolbar: {
left: "today prev,next",
center: "title",
right: "dayGridMonth,timeGridWeek,timeGridDay,listMonth"
},
initialView: "dayGridMonth",
events: function (fetchInfo, successCallback, failureCallback) {
successCallback([
{
id: "1",
title: "event1",
start: "2020-07-01 19:30",
end: "2020-07-02 19:30",
backgroundColor: "#39CCCC",
cid: "1"
},
{
id: "2",
title: "event2",
start: "2020-07-09 19:30",
end: "2020-07-10 19:30",
backgroundColor: "#F012BE",
cid: "2"
}
]);
},
eventDataTransform: function (eventData) {
var selectedTab = document.querySelector(".nav-tabs li a.active").dataset.tabid;
if (selectedTab == "all" || eventData.cid == selectedTab) {
return eventData;
}
else return false; //discard the event
}
});
calendar.render();
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
calendar.refetchEvents();
});
});
添加回答
举报