FullCalendar - salvar eventos no cookie
-
12-12-2019 - |
Pergunta
Eu estou tentando criar um FullCalendar com o externo funcionalidade de arrastar, onde você pode guardar os eventos a serem adicionados ao calendário em um cookie (eu teria muito preferi guardar isso no servidor, mas isso não é uma opção).Estou usando o jquery cookie plugin para torná-lo mais fácil.
O que eu tenho até agora é a de guardar a funcionalidade (o que eu acredito que está a trabalhar):
function save() { var eventsFromCalendar = $('#calendar').fullCalendar( 'clientEvents'); $.cookie("DSCalendar", eventsFromCalendar, {expires: 1}); }
...Mas eu não posso conseguir o calendário para incluir isso quando eu abrir ele.Eu tentei fazer assim, mas ele parece não funcionar em todos os:
$(document).ready(function() {
....
var savedEvents = $.cookie("DSCalendar");
$('#calendar').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
events: savedEvents,
...........
Alguma chance de que há alguém lá fora que já fez isso antes ou tem alguma idéia de como eu posso começar os eventos salvos sem o uso de um servidor?
Solução
O cookie plugin não pode armazenar objetos complexos matrizes, eu acho.É por isso que eu sugeriu o uso de JSON.stringify
.No entanto, a matriz de Objeto retornado pelo .fullCalendar('clientEvents')
contém recursiva referências de Objeto - assim, mesmo JSON.stringify
não consegue converter isso com sucesso.
Dê uma olhada neste violino:http://jsfiddle.net/100thGear/v6tSd/
Eu criei um Objeto temp matriz antes de armazená-lo no cookie e, em seguida, JSON.stringify
e JSON.parse
funcionou perfeitamente.
Deixe-me saber se isso ajuda.
Outras dicas
Em FullCalendar v1, o conteúdo de clientEvents inclui uma chave-objeto par chamado de "fonte" para cada evento, se você está a carregar os seus dados remotamente.Esse par tem o URL da remota de dados, que retorna o erro "Conversão de estrutura circular para JSON" se você tentar stringify clientEvents, a fim de guardar ou enviar para um local que precisa de uma cadeia, não é uma matriz de objetos.O trabalho todo que eu usei é remover o "source" (fonte e objeto com o seguinte script:
var eventsFromCalendar = $('#calendar').fullCalendar('clientEvents');
for (var i = 0; i < eventsFromCalendar.length; i++) {
delete eventsFromCalendar[i].source
}
var jstrng = JSON.stringify(eventsFromCalendar);