Filter 是否有一种方法可以在不涉及最终用户的情况下预过滤事件(针对特定事件名称)(无复选框或下拉列表)(JSON提要)
(大家好。这是我第一次使用引导式发帖模式发帖,请耐心等待) 我使用Fullcalendar已经有一段时间了,现在可以显示来自多个日历的JSON提要的事件(每个JSON提要一个日历)。这些JSON提要是ical.js将.ics提要转换为fullcalendar。但是,我现在需要将这些日历分解为列表,并根据事件名称中的某些文本以类似于以下方式对其进行过滤: 完整的事件列表Filter 是否有一种方法可以在不涉及最终用户的情况下预过滤事件(针对特定事件名称)(无复选框或下拉列表)(JSON提要),filter,fullcalendar,server-side,fullcalendar-3,Filter,Fullcalendar,Server Side,Fullcalendar 3,(大家好。这是我第一次使用引导式发帖模式发帖,请耐心等待) 我使用Fullcalendar已经有一段时间了,现在可以显示来自多个日历的JSON提要的事件(每个JSON提要一个日历)。这些JSON提要是ical.js将.ics提要转换为fullcalendar。但是,我现在需要将这些日历分解为列表,并根据事件名称中的某些文本以类似于以下方式对其进行过滤: 完整的事件列表 January 1 lunch gathering outing dinner January 2
January 1
lunch
gathering
outing
dinner
January 2
lunch
gathering
outing
dinner
January 3
lunch
closing
网页过滤事件列表(午餐过滤)
当日历基于提要而不是手动事件列表时,是否可以使用Fullcalendar根据事件标题进行筛选
我正在运行fullcalendar 3.9.0(我可能会转到3.10)。这是我可以运行的最新版本,因为需要配置其他软件才能使用版本4
我还使用mozilla ical.js脚本将ical提要转换为JSON提要
我的期望是,我实际上可能有两个方面可以进行过滤:
ics_sources = [
{
url:'https://www.example.com/calendaring/15/',
event_properties: {
color:'#7a9b49'
}
},
]
function data_req (url, callback) {
req = new XMLHttpRequest()
req.addEventListener('load', callback)
req.open('GET', url)
req.send()
}
function add_recur_events() {
if (sources_to_load_cnt < 1) {
$('#calendar').fullCalendar('addEventSource', expand_recur_events)
} else {
setTimeout(add_recur_events, 30)
}
}
function load_ics(ics){
data_req(ics.url, function(){
$('#calendar').fullCalendar('addEventSource', fc_events(this.response, ics.event_properties))
sources_to_load_cnt -= 1
})
}
$(document).ready(function() {
$('#calendar').fullCalendar({
header: {
left: '',
center: '',
right: ''
},
viewDisplay: function(view) {
parent.setIframeHeight(iframeId) ;
},
eventClick: function(event) {
window.open(event.url,);
return false;
},
defaultView: $(window).width() < 765 ? 'listYear':'listYear',
nowIndicator: false,
eventLimit: 4,
fixedWeekCount: false,
listDayFormat: 'MMMM Do',
listDayAltFormat: false,
noEventsMessage: "No Currently Scheduled Events"
})
sources_to_load_cnt = ics_sources.length
for (ics of ics_sources) {
load_ics(ics)
}
add_recur_events()
})
ics\u源=[
{
网址:'https://www.example.com/calendaring/15/',
事件属性:{
颜色:“#7a9b49”
}
},
]
函数数据请求(url、回调){
req=新的XMLHttpRequest()
请求addEventListener('load',回调)
请求打开('GET',url)
请求发送()
}
函数add\u recur\u events(){
如果(源到负载小于1){
$(“#日历”).fullCalendar('addEventSource',expand_recur_events)
}否则{
设置超时(添加重复事件,30)
}
}
功能负载(ics){
数据请求(ics.url,函数(){
$('#calendar').fullCalendar('addEventSource',fc_事件(this.response,ics.event_属性))
源\u至\u负载\u cnt-=1
})
}
$(文档).ready(函数(){
$(“#日历”).fullCalendar({
标题:{
左:'',
中心:'',
对:“”
},
视图显示:功能(视图){
parent.setIframeHeight(iframeId);
},
eventClick:函数(事件){
window.open(event.url,);
返回false;
},
defaultView:$(窗口).width()<765?'listYear':'listYear',
nowIndicator:错误,
事件限制:4,
fixedWeekCount:false,
listDayFormat:'MMMM Do',
listDayAltFormat:false,
noEventsMessage:“没有当前计划的事件”
})
sources_至_load_cnt=ics_sources.length
用于(ics\U源的ics){
加载集成电路(ics)
}
添加重复事件()
})
预期(期望)结果将是基于最终用户期望的事件标题在日历调用中预筛选的列表
实际结果:我目前没有进行任何预筛选。要澄清的是……您在服务器端使用的是ical.js吗?您的服务器端节点是node.js吗?如果可以的话,在服务器上过滤数据会更有效……一旦你有了ical.js来创建JSON,那么你就可以在将列表返回给客户端之前编写一些代码来过滤列表。显然,您需要在AJAX请求中将用户选择的过滤词作为参数传递。您定义和获取事件源的方法非常繁琐,而且不必要——fullCalendar可以为您解决这一问题,包括处理所有AJAX请求。请参阅,并(同时)感谢ADyson,我没有访问服务器的权限。我在我的Web主机上使用的是ical.js,该页面仅显示日历。这不是实际存在.ics提要的服务器。另一台服务器上有一个iCal服务,作为日历提要,它只能细化到列出特定组的所有事件:例如:/location/group/events。也许有更好的方法可以做到这一点,但我的方法是基于其他人的建议,因为我对fullcalendar不太熟悉。我将研究JSON ical.js产生了什么样的过滤可能性。Thanksok您可以在客户端执行完全相同的过滤,尽管它的效率稍低,因为您必须下载所有内容,只需丢弃其中的一部分。在fullCalendar上下文中,您有几个选项可用于点击事件提要。您可以根据筛选条件处理和检查每个事件的内容…如果不匹配,则可以返回false,这(根据文档)将从fullCalendar中丢弃该事件。
ics_sources = [
{
url:'https://www.example.com/calendaring/15/',
event_properties: {
color:'#7a9b49'
}
},
]
function data_req (url, callback) {
req = new XMLHttpRequest()
req.addEventListener('load', callback)
req.open('GET', url)
req.send()
}
function add_recur_events() {
if (sources_to_load_cnt < 1) {
$('#calendar').fullCalendar('addEventSource', expand_recur_events)
} else {
setTimeout(add_recur_events, 30)
}
}
function load_ics(ics){
data_req(ics.url, function(){
$('#calendar').fullCalendar('addEventSource', fc_events(this.response, ics.event_properties))
sources_to_load_cnt -= 1
})
}
$(document).ready(function() {
$('#calendar').fullCalendar({
header: {
left: '',
center: '',
right: ''
},
viewDisplay: function(view) {
parent.setIframeHeight(iframeId) ;
},
eventClick: function(event) {
window.open(event.url,);
return false;
},
defaultView: $(window).width() < 765 ? 'listYear':'listYear',
nowIndicator: false,
eventLimit: 4,
fixedWeekCount: false,
listDayFormat: 'MMMM Do',
listDayAltFormat: false,
noEventsMessage: "No Currently Scheduled Events"
})
sources_to_load_cnt = ics_sources.length
for (ics of ics_sources) {
load_ics(ics)
}
add_recur_events()
})