13

通常这是日历中的事件:

            {

                title: 'Test',

                start: '2012-06-08',

                end: '2012-06-08',

                url: 'test/test'

            },

工作正常。虽然我怎样才能在日历中的每个星期一显示 1 个事件?或者每个星期二等取决于您输入的工作日/号码?如果存在一个参数是什么?

如果它不存在,我可以以某种方式修改并添加实现此功能的功能吗?因此,您可以输入一个参数,如 repeatEveryWeekDay: 2(即星期一),然后在未来的所有星期一,数据将显示在那里。

我尝试查看http://arshaw.com/fullcalendar/docs/event_data/Event_Object/但找不到任何东西。

4

4 回答 4

37

fullCalendar允许您传递一个函数,而不是传递事件数组,而是传递一个函数,例如,从服务器下载事件,或动态生成这些事件。

文档中的大多数示例都使用 HTTP 请求来获取事件数据。但是回调函数仍然足够灵活,可以让它按照你想要的方式工作。

请看下面我刚刚为您编写的示例:

$(document).ready(function() {

    var date = new Date();
    var d = date.getDate();
    var m = date.getMonth();
    var y = date.getFullYear();

    $('#calendar').fullCalendar({
        header: {
            left: 'prev,next today',
            center: 'title',
            right: 'month,agendaWeek,agendaDay'
        },
        editable: true,
        events: [
            // some original fullCalendar examples
            {
                title: 'All Day Event',
                start: new Date(y, m, 1)
            },
            {
                title: 'Long Event',
                start: new Date(y, m, d-5),
                end: new Date(y, m, d-2)
            },
            {
                id: 999,
                title: 'Repeating Event',
                start: new Date(y, m, d-3, 16, 0),
                allDay: false
            }
        ]
    });

    // adding a every monday and wednesday events:
    $('#calendar').fullCalendar( 'addEventSource',        
        function(start, end, callback) {
            // When requested, dynamically generate virtual
            // events for every monday and wednesday.
            var events = [];

            for (loop = start.getTime();
                 loop <= end.getTime();
                 loop = loop + (24 * 60 * 60 * 1000)) {

                var test_date = new Date(loop);

                if (test_date.is().monday()) {
                    // we're in Moday, create the event
                    events.push({
                        title: 'I hate mondays - Garfield',
                        start: test_date
                    });
                }

                if (test_date.is().wednesday()) {
                    // we're in Wednesday, create the Wednesday event
                    events.push({
                        title: 'It\'s the middle of the week!',
                        start: test_date
                    });
                }
            } // for loop

            // return events generated
            callback( events );
        }
    );
});

上述函数会在两个日期之间的每个星期一和星期三自动生成一个事件。日期在startend参数中表示。这些参数通过fullCallendar. fullCallendar上述函数产生的事件通过callback第三个参数中的函数返回。

我使用DateJS来测试给定的日期是否是星期一。

更新:如果您想混合静态事件和/或 [多个] 可重复事件,您可以使用addEventSource

于 2012-06-20T01:47:10.560 回答
8

克里斯托弗·拉米雷斯 (Christopher Ramírez) 的帖子的一点更新。使用 fullCalendar atv2.2.3和 momentjs atv2.8.4您需要修改上面代码段中的几行以使其工作:

第一的:

function(start, end, callback) {}

function(start, end, status, callback) {}

因为第三个参数是布尔值,第四个是回调函数

然后:

for (loop = start.getTime();
     loop <= end.getTime();
...

for (loop = start._d.getTime();
     loop <= end._d.getTime();

因为传递给函数的开始和结束对象不是 Date 对象,并且在它们上调用 .getTime() 最终会出现“未定义不是函数”错误。

就是这样!这个修改使它对我有用。

于 2014-12-08T09:33:18.113 回答
1

我发现解决重复事件的最佳方法是设置对后端语言的 JSON 调用(我使用的是 Django/Python)。

所以在日历选项中我会有:

事件:{ url:'/event-data',缓存:false },

然后在我的后端,我利用为当前显示的日历“开始”和“结束”URL GET 变量发送的参数。IE:

hxxp://example.com:8000/event-data?start=2014-09-28&end=2014-11-09&_=1413553318353

将从事件选项发送一个 Get 请求,然后我从列出重复事件以及常规日历事件的数据库/源文件构建事件,并在 JSON 列表中仅发回在该日期范围内发生的事件列表。

于 2014-10-17T13:44:36.997 回答
1

事件对象的 ID 字段决定了该事件的可重复性。对一周中特定日期的所有重复事件使用相同的 ID。

于 2012-06-17T15:59:41.707 回答