【问题标题】:fullcalendar return event end null when allDay is true当 allDay 为真时,fullcalendar 返回事件结束 null
【发布时间】:2014-07-06 13:56:45
【问题描述】:

我不知道这是功能还是错误。但如果 allDay 为真,则事件结束值设置为 null。 这是更新事件的函数:

 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);      

            },

控制台显示

end before update : 1404896400000
end after update: null 

fullcalendar 属性 forceEventDuration 设置为 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,
                     ...
                    })

控制台显示

end before update : 1404864000000
end after update: 1404813300000 

在这种情况下,事件的呈现是一天。即使在将 allDay 更新为 false 之后,它也会继续显示为一天事件,直到从服务器重新加载事件。 我认为标准行为是 allDay 必须有一个开始和结束日期。但我不确定将结束日期声明为空的意图。可能是我误解了这种行为的美妙之处。我不知道如何用于我的目标。我需要像其他日历一样的结束日期。

http://jsfiddle.net/Mr_Vertigo/k3RZX/1/ 并且版本是v2.0.2

【问题讨论】:

    标签: javascript backbone.js fullcalendar


    【解决方案1】:

    这个问题不是因为 allday 设置为 true。 Fullcalendar 有一个问题,如果开始日期和结束日期相同,它只会将结束日期设为空。

    如果事件的结束日期与开始日期相同,FullCalendar 将其视为持续时间为 1 天(假定结束时间为空白),因此它是相同的。它更喜欢存储更少的数据而不是更多的数据。所以请仔细检查开始日期和结束日期是否相同。

    但您可以简单地这样做作为一种解决方法:

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

    检查以下链接。

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

    【讨论】:

      【解决方案2】:

      它不需要设置,因为你有defaultAllDayEventDuration 选项。 此外,forceEventDuration 不适用于全天事件 (see here)

      如果您不想 end 为空,那么只需手动设置它。

      【讨论】:

        【解决方案3】:

        如您在文档中看到的,当 allDay 发生变化时,FullCalendar 始终将 end 设置为 null。 Line 1886

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多