2012-07-26 59 views
2

我试图用外部拖动功能创建一个FullCalendar,您可以在其中保存添加到日历中的事件到一个cookie中(我希望将它保存在服务器上,这不是一个选项)。我使用jquery cookie插件使其更容易。FullCalendar - 在cookie中保存事件

我已经走到这一步,是保存功能(我相信在工作):

function save() { 
    var eventsFromCalendar = $('#calendar').fullCalendar('clientEvents'); 
    $.cookie("DSCalendar", eventsFromCalendar, {expires: 1}); 
} 

...但我不能让日历时,我包括这接下来打开它。我试着做这样的,但它似乎并没有在所有的工作:

$(document).ready(function() { 
    .... 

     var savedEvents = $.cookie("DSCalendar"); 
     $('#calendar').fullCalendar({ 

      header: { 
       left: 'prev,next today', 
       center: 'title', 
       right: 'month,agendaWeek,agendaDay' 
      }, 
      events: savedEvents, 
      ........... 

任何机会,还有人在那里谁已经做过或对如何,我可以得到保存的事件没有任何想法使用服务器?

+0

如果您调试过这个,savedEvents的值是多少?你也可以使用JSON.stringify和JSON.parse来存储和从cookie中检索这个对象。 ''.cookie(“DSCalendar”,JSON.stringify(eventsFromCalendar),{expires:1});''var'savedEvents = JSON.parse($ .cookie(“DSCalendar”))''我有类似的问题 - 但我使用LocalStorage而不是Cookie。 – ganeshk 2012-07-26 15:28:58

+0

@ganeshk - 对于已保存的每个事件,savedEvents值是'[object Object]',这是不正确的。添加JSON.stringify/parse给了我''“length”:1,“0”:{},“context”:{“jQuery17108956974661894247”:1,“location”:{}},“selector”:“#calendar” }'和日历不显示在页面上。您是否找到了使用LocalStorage的简单方法? – 2012-07-26 15:41:30

回答

4

我认为cookie插件无法存储复杂的对象数组。这就是为什么我建议使用JSON.stringify。但是,由.fullCalendar('clientEvents')返回的对象数组包含递归对象引用 - 因此即使JSON.stringify未能成功转换它。

看看这个小提琴: http://jsfiddle.net/100thGear/v6tSd/

我将其存储在cookie之前创建一个临时的对象数组,然后JSON.stringifyJSON.parse完美。

让我知道这是否有帮助。

+0

谢谢!这非常有帮助 - 尽管我最终选择了localStorage,因为这些cookie似乎并没有妥善保存。它终于工作了! – 2012-07-27 09:52:20

+0

非常有用,谢谢! – Chris 2012-12-14 12:02:35

+0

你先生,是个绅士和学者 – 2014-05-30 16:05:21

0

在FullCalendar v1中,如果要远程加载数据,clientEvents的内容将为每个事件包含一个名为“source”的键 - 对象对。该对具有其中的远程数据的URL,如果尝试对客户端事件进行字符串化以保存或将其发送到需要字符串的位置,而不是对象数组,则会返回错误“将圆形结构转换为JSON”。我使用的解决方法是使用以下脚本删除“源”键和对象:

var eventsFromCalendar = $('#calendar').fullCalendar('clientEvents'); 
for (var i = 0; i < eventsFromCalendar.length; i++) { 
    delete eventsFromCalendar[i].source 
    } 
var jstrng = JSON.stringify(eventsFromCalendar);