使用 Fullcalendar 4,我正在尝试使用选择菜单显示/隐藏我的资源。当用户从菜单中选择一个提供者时,我只想显示一个资源的事件。
在我的完整日历上方,我有我的选择菜单:
<select id="toggle_providers_calendar" class="form-control" >
<option value="1" selected>Screech Powers</option>
<option value="2">Slater</option>
</select>
我正在使用包含的 fullcalendar.php 页面上的 ajax 调用来收集我需要的资源。我将它们存储在一个对象中,然后尝试控制在屏幕上显示哪些资源:
document.addEventListener('DOMContentLoaded', function() {
var resourceData = [];
$.getJSON('ajax_get_json.php?what=schedule_providers_at_location',
function(data) {
$.each(data, function(index) {
resourceData.push({
id: data[index].value,
title: data[index].text
});
});
console.log(resourceData);
});
//below, set the visible resources to whatever is selected in the menu
//using 1 in order for that to show at start
var visibleResourceIds = ["1"];
//below, get the selected id when the the menu is changed and use that in the toggle resource function
$('#toggle_providers_calendar').change(function() {
toggleResource($('#toggle_providers_calendar').val());
});
var calendar_full = document.getElementById('calendar_full');
var calendar = new FullCalendar.Calendar(calendar_full, {
events: {
url: 'ajax_get_json.php?what=location_appointments'
},
height: 700,
resources: function(fetchInfo, successCallback, failureCallback) {
// below, I am trying to filter resources by whether their id is in visibleResourceIds.
var filteredResources = [];
filteredResources = resourceData.filter(function(x) {
return visibleResourceIds.indexOf(x.id) !== -1;
});
successCallback(filteredResources);
},
...
});
// below, my toggle_providers_calendar will trigger this function. Feed it resourceId.
function toggleResource(resourceId) {
var index = visibleResourceIds.indexOf(resourceId);
if (index !== -1) {
visibleResourceIds.splice(index, 1);
} else {
visibleResourceIds.push(resourceId);
}
calendar.refetchResources();
}
为了确保 getJSON 正常工作,我有 console.log(resourceData)。收集后控制台中的信息是:
[{id: '1', title: 'Screech Powers'}, {id: '2', title: 'Slater}]
...以上是可以选择/呈现的正确资源。所以这似乎没问题。
在页面加载时,根本不显示任何资源,当资源 id 为“1”(Screech Powers)时,应根据我的代码显示。好吧,至少,这就是我现在想要做的。
当菜单更改时,资源将显示/隐藏,但不基于选择的内容;仅显示菜单中选择的内容的逻辑似乎不起作用。
我曾经对我的资源使用 URL 请求:'ajax_get_json.php?what=schedule_providers_at_location',它运行良好!所有资源都会正确显示它们的事件。我只是想通过使用菜单来根据需要显示/隐藏资源来修改它。