在fullcalendar中是否有任何方法在客户端动态过滤事件?
当我从服务器(json_encoded)获取事件时,我将自己的参数“school_id”分配给每个事件.
在fullcalendar准备好之后,我想用“select”动态过滤事件.
当我从服务器(json_encoded)获取事件时,我将自己的参数“school_id”分配给每个事件.
在fullcalendar准备好之后,我想用“select”动态过滤事件.
<select id='school_selector'> <option value='all'>All schools</option> <option value='1'>school 1</option> <option value='2'>school 2</option> </select>
jQuery("#school_selector").change(function(){ filter_id = $(this).val(); if (filter_id != 'all') { var events = $('#mycalendar').fullCalendar( 'clientEvents',function(event) { if((filter_id == 'all') ) { return true; }else{ //what I need to write here to dynamic filter events on calendar? }); } });
但它不起作用.
任何帮助都会很棒.谢谢.
解决方法
从fullCalendar的第2版开始,您可以使用
eventRender回调来有选择地呈现事件.将此与onChange处理程序中的
rerenderEvents方法调用相结合,您的事件应根据所选选项自动更新.
$('#mycalendar').fullCalendar({ events: [ { title: 'Event 1',start: '2015-05-01',school: '1' },{ title: 'Event 2',start: '2015-05-02',school: '2' },{ title: 'Event 3',start: '2015-05-03',{ title: 'Event 4',start: '2015-05-04',school: '2' } ],eventRender: function eventRender( event,element,view ) { return ['all',event.school].indexOf($('#school_selector').val()) >= 0 } }); $('#school_selector').on('change',function(){ $('#mycalendar').fullCalendar('rerenderEvents'); })
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.9.0/moment.min.js"></script> <script src="http://fullcalendar.io/js/fullcalendar-2.3.1/fullcalendar.min.js"></script> <link rel="stylesheet" href="http://fullcalendar.io/js/fullcalendar-2.3.1/fullcalendar.min.css" /> <select id="school_selector"> <option value="all">All</option> <option value="1">School 1</option> <option value="2">School 2</option> </select> <div id="mycalendar"></div>
上面,如果SELECT的值为’all’或与事件对象的school属性匹配,则eventRender函数将返回true并显示事件.否则在渲染期间将跳过它.
此方法优于将过滤参数传递到事件源,因为这需要多次往返服务器.您可以一次加载所有事件,并使用eventRender在显示时动态过滤它们.