我一天有很多活动,它按预期工作,但现在看月视图,我的日历网格要高得多。我想在月份视图中隐藏其中的一些事件,比如一个带有视觉阙的摘要,这一天在这一天比可以显示的更多。
我可以使用eventRender并返回false,但我想知道某一天有多少事件,所以我可以将渲染限制在4左右,然后我可能会添加一个说“更多... “
所以问题可能是:如何计算给定日期的事件?
或者这更像是为月视图公开最大计数器的功能请求?
感谢
答案 0 :(得分:4)
从FullCalendar 2.1.0开始,包含此功能,只需使用:
$('#calendarBlock').fullCalendar({
eventLimit: true
[...]
});
演示:http://arshaw.com/js/fullcalendar-2.1.0-beta2/demos/agenda-views.html
答案 1 :(得分:1)
答案 2 :(得分:1)
我有类似的要求,并且正在考虑做这样的事情:
在json feed中,我会返回包含每天事件计数的特殊事件。
使用适当的完整日历eventRender回调,我只会根据视图显示这些特殊的总计数事件,在eventRender()中为我不想看到的任何事件返回false。
我还没有实现这个,但也许它可能是一个有效的途径。如果我错了,请纠正我。
答案 3 :(得分:1)
这个错误(大部分被遗弃)的插件确实完全你要求的东西。看看,并随时贡献。 警告:这是一个黑客,但fullcalendar本身有一个需要大量工作的API。大多数重要部件都被困在一个封闭件中,这使得它很难伸展。除非你想编辑插件的源代码,否则没有办法在没有hackery的情况下实现这一点。
话虽如此,这是我找到的最接近你所要求的:https://github.com/lyconic/fullcalendar/tree/view-more
答案 4 :(得分:0)
我做了类似的事情:
function(start, end, callback) {
var viewName = $("#calendar").fullCalendar('getView');
var startTime = Math.round(start.getTime() / 1000);
var endTime = Math.round(end.getTime() / 1000);
MyWebService.MyWebMethod.GetEventsByView(startTime, endTime, viewName.name,
function(args) {
callback(args);
},
function(error) {
var e = error;
}
);
}
此处GetEventsByView
方法返回月视图的分组集以及agendaWeek和day视图的详细设置。但为了使其正常工作,我必须为日历设置lazyFetching:false
。
答案 5 :(得分:0)
我这样做
的CSS:
.MaxHght
{
height:16px;
}
.viewMore
{
float:right;
color: rgb(219, 104, 28);
cursor:pointer;
}
插件代码
dayClick: function (date, allDay, jsEvent, view) {
$('#fullCalendar').fullCalendar('changeView', 'agendaDay').fullCalendar('gotoDate', date.getFullYear(), date.getMonth(), date.getDate());
},
eventRender: function (event, element, view) {
element.qtip({
content: event.QText,
position: {
my: 'CenterBottom',
at:'TopCenter'
},
style: {
tip: 'bottomMiddle'
}
});
$(element).removeClass('MaxHght');
if (view.name == 'month') {
$(element).addClass('MaxHght');
var year = event.start.getFullYear(), month = event.start.getMonth() + 1, date = event.start.getDate();
var result = year + '-' + (month < 10 ? '0' + month : month) + '-' + (date < 10 ? '0' + date : date);
$(element).addClass(result);
var ele = $('td[data-date="' + result + '"]'),count=$('.' + result).length;
$(ele).find('.viewMore').remove();
if ( count> 3) {
$('.' + result + ':gt(2)').remove();
$(ele).find('.fc-day-number').after('<a class="viewMore"> More</a>');
}
}
},
eventAfterAllRender: function (view) {
if (view.name == 'month') {
$('td.fc-day').each(function () {
var EventCount = $('.' + $(this).attr('data-date')).length;
if (EventCount == 0)
$(this).find('.viewMore').remove();
});
}
},
答案 6 :(得分:0)
您不需要花费太多精力来计算事件的总数。
我有一个简单的方法来计算我的fullCalendar上的总事件。在eventAfterAllRender
中,写下这样的内容,
eventAfterAllRender: function(view) {
var allevents = $('#calendar').fullCalendar('clientEvents');
var countevents = 0;
if( allevents.length ) {
countevents = countevents + allevents.length;
}
if(!countevents) {
// alert('event count is'+countevents);
console.log('event count is',countevents);
}
}
- 其中calendar
是我的日历#
这就是我的一切。我从这里开始离开。但我相信,如果您在fullCalendar的loading: function()
上尝试某些内容来根据您的意愿限制事件数量,那就不那么难了。
谢谢。