【问题标题】:fullcalendar, how to limit the number of events per day in the month viewfullcalendar,如何在月视图中限制每天的事件数
【发布时间】:2010-04-04 19:02:06
【问题描述】:

我一天有很多活动,它按预期工作,但现在查看月份视图,我的日历网格比预期的要高得多。我想从月视图中隐藏其中的一些事件,例如带有视觉查询的摘要,表明这一天的内容比显示的要多。

我可以使用 eventRender 并返回 false,但我想知道某一天有多少事件,所以我可以将渲染限制在 4 个左右,然后也许我会添加一个事件,上面写着“更多... "

所以问题可能是:如何计算给定日期的事件?

或者这更像是一个为月视图公开最大计数器的功能请求?

谢谢

【问题讨论】:

标签: javascript fullcalendar


【解决方案1】:

从 FullCalendar 2.1.0 开始,包含此功能,只需使用:

$('#calendarBlock').fullCalendar({
    eventLimit: true
    [...]
});

演示:http://arshaw.com/js/fullcalendar-2.1.0-beta2/demos/agenda-views.html

文档:http://fullcalendar.io/docs/display/eventLimit/

【讨论】:

    【解决方案2】:

    我有类似的要求,正在考虑做这样的事情:

    在 json 提要中,我将返回包含每天事件计数的特殊事件。

    使用适当的完整日历 eventRender 回调,我只会根据视图显示这些特殊的总计数事件,方法是在 eventRender() 中为我不想看到的任何事件返回 false。

    我还没有实现这个,但也许它是一个有效的途径。如果我错了,请纠正我。

    【讨论】:

      【解决方案3】:

      这个有缺陷的(大部分被废弃的)插件完全满足你的要求。检查一下,并随时做出贡献。 警告: 这是一个 hack,但 fullcalendar 本身有一个需要大量工作的 API。大多数重要部件都被困在一个封闭件中,这使得它很难扩展。除非你想编辑插件的源代码,否则真的没有办法做到这一点。

      话虽如此,这是我找到的最接近您要求的内容:https://github.com/lyconic/fullcalendar/tree/view-more

      【讨论】:

        【解决方案4】:

        目前不可能。见功能要求: http://code.google.com/p/fullcalendar/issues/detail?id=304

        【讨论】:

        【解决方案5】:

        您无需花费太多精力来计算事件总数。 我有一个简单的方法来计算我的 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() 上尝试一些东西来根据你的意愿限制事件的数量,这并没有那么难。

        谢谢。

        【讨论】:

          【解决方案6】:

          我做了这样的事情:

          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 方法为月视图返回分组集,为议程周和日视图返回详细集。但是为了让它正常工作,我必须为日历设置lazyFetching:false

          【讨论】:

            【解决方案7】:

            我就是这样的

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-03-10
              • 2014-02-18
              • 1970-01-01
              • 1970-01-01
              • 2015-10-13
              相关资源
              最近更新 更多