Filter 是否有一种方法可以在不涉及最终用户的情况下预过滤事件(针对特定事件名称)(无复选框或下拉列表)(JSON提要)

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

(大家好。这是我第一次使用引导式发帖模式发帖,请耐心等待)

我使用Fullcalendar已经有一段时间了,现在可以显示来自多个日历的JSON提要的事件(每个JSON提要一个日历)。这些JSON提要是ical.js将.ics提要转换为fullcalendar。但是,我现在需要将这些日历分解为列表,并根据事件名称中的某些文本以类似于以下方式对其进行过滤:

完整的事件列表

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提要

我的期望是,我实际上可能有两个方面可以进行过滤:

  • 在ical.js或ical_events.js中

  • 在我的fullcalendar配置中(可能在defaultView部分)

  • 下面是我用来调用日历的部分代码:

    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()
    })