1

我正在构建一个允许用户创建重复事件的日历应用程序。

我不是在 MongoDB 中为每个重复事件创建一个新对象,而是创建一个附加了重复规则的单个事件对象。

然后在客户端上,我正在“扩展”重复规则,为事件的每次重复创建临时对象,以便它们都显示在日历中。

这一切都非常有效,并且可以防止我的数据库在事件频繁发生时填满数百个对象。我的问题是:我如何才能针对每个重复事件存储数据?例如,使用 Google 日历我可以创建一个循环事件,然后为每个循环添加“注释”。注释可以添加到单个事件或所有事件。

到目前为止,我的想法是当用户想要添加“注释”时,为用户正在编辑的重复添加 EXDATE,然后为其创建一个新的独立事件对象。

我不确定这是否是解决这个问题的最佳方法。建议非常感谢。

4

1 回答 1

1

就 iCalendar 表示而言,对此类异常进行建模的正确方法是使其成为同一事件(同一 UID)的一部分,并带有一个额外的 RECURRENCE-ID 参数。您不应添加 EXDATE:

BEGIN:VEVENT
UID:XXX
DTSTART;TZID=zzz:20170401T090000
RRULE:FREQ=DAILY
...
END:VEVENT
BEGIN:VEVENT
UID:XXX
RECURRENCE-ID;TZID=zzz:20170405T090000
DTSTART;TZID=zzz:20170405T090000
... 
END:VEVENT

请注意,异常的 RECURRENCE-ID 应始终对应于从 RRULE 计算的日期时间,而异常的 DTSTART 可能不同(例如,如果在一个实例上将事件的时间从 9 移动到 10,则 RECURRENCE -ID 为 T090000,而 DTSTART 为 T100000。

另见https://www.rfc-editor.org/rfc/rfc5546#section-4.4.2

于 2017-03-30T07:29:52.970 回答