2014-07-06 6 views
11

Non so se si tratta di una funzionalità o di un bug. Ma il valore finale dell'evento è impostato su null se allDay è true. Questa è la funzione in cui viene aggiornata l'evento:evento di ritorno fullcalendar null quando allDay è true

change: function (eventModel) { 


       var currEvId = eventModel.get('_id'); 
       var fcEvent = $("#calendar").fullCalendar('clientEvents', currEvId)[0] || {}; 
       console.log("end before update : " + fcEvent.end); 

       fcEvent.title = alvEventModel.get("title");     
       fcEvent.start = new Date(alvEventModel.get("start")); 
       fcEvent.end = new Date(alvEventModel.get("end")); 
       fcEvent.allDay = alvEventModel.get("allDay"); //true or false    
       this.el.fullCalendar('updateEvent', fcEvent); 

       console.log("start: " + fcEvent.start); 
       console.log("end: " + fcEvent.end);  

      }, 

La console mostra

end before update : 1404896400000 
end after update: null 

La proprietà forceEventDuration fullcalendar è settata su true

this.$el.fullCalendar({ 
        lang: 'sv', 
        header: { 
         left: 'prev,next, today', 
         center: 'title', 
         right: 'month,agendaWeek,agendaDay', 
         ignoreTimezone: false 
        }, 
        forceEventDuration:true, 
        select: this.select, 
        selectable: true, 
        selectHelper: true, 
        editable: true, 


        disableDragging: true, 
        disableResizing: true, 

        aspectRatio: 2.5, 
        height: 600, 
        weekNumbers: true, 
        ... 
        }) 

la console mostra

end before update : 1404864000000 
end after update: 1404813300000 

In questo caso il rendering per l'evento è un giorno. Anche dopo l'aggiornamento con allDay su false, continua a essere visualizzato come un evento di un giorno fino a quando non si ricaricano gli eventi dal server. Penso che il comportamento standard sia per tutti i giorni deve avere una data di inizio e di fine. Ma non sono sicuro che le intenzioni di dichiarare la data di fine siano nulle. Potrei essere io a capire la bellezza di questo comportamento. Non so come usare per i miei obiettivi. Ho bisogno di una data di fine come altri calendari.

http://jsfiddle.net/Mr_Vertigo/k3RZX/1/ E la versione è v2.0.2

risposta

1

Non ha bisogno di essere impostato, perché avete defaultAllDayEventDuration opzione. Inoltre forceEventDuration non si applica a tutti gli eventi giorno (see here)

Se non si desidera finale di essere nulla, quindi basta impostarlo manualy.

0

FullCalendar imposta sempre fine a null quando allDay cambia come si può vedere nel doc. Line 1886

if (newAllDay != oldAllDay) { 
     // if allDay has changed, always throw away the end 
     clearEnd = true; 
} 
6

Questo problema non è perché allday è impostato su true. Fullcalendar ha un problema che, se la data di inizio e la data di fine sono uguali, rende semplicemente la data di fine nullo.

Se la data di fine dell'evento è la stessa della data di inizio, FullCalendar considera la durata di 1 giorno (con una data di fine presunta vuota), quindi è univoco. Preferisce memorizzare meno dati di più. Quindi, controlla attentamente se la data di inizio e la data di fine stanno arrivando.

ma si potrebbe semplicemente fare questo come una soluzione alternativa:

eventClick: function(event) { 
    var start = event.start; 
    var end = event.end || start; 
} 

Controllare seguente link.

https://code.google.com/p/fullcalendar/issues/detail?id=1014