我在日历中的事件是在同一日期的堆栈,但我的事件有不同的日期

时间:2017-11-09 09:36:06

标签: jquery events fullcalendar thymeleaf

大家好,我被困在这个日历上。 我需要在日历中显示我的活动。我只有一个事件显示正常,但当我还有两个事件时,我的事件存储在同一个日期!虽然他们有不同的约会。 我正在检索数据库中的may事件..

这是我的jQuery代码:

<script th:inline="javascript">
/*<![CDATA[*/

var events = [];
var myObject = new Object();
var theList = [[${appointments}]]

$(document).ready(function(){

    for (var i = 0; i < theList.length; i++) {
        myObject.title = theList[i].title;
        myObject.start = new Date(theList[i].start);
        myObject.requestNumber = theList[i].requestNumber;
        myObject.locationId = theList[i].locationId;
        myObject.arrivalTime = theList[i].arrivalTime;
        myObject.admissionDate = new Date(theList[i].admissionDate);
        myObject.procedureDate = "-";
        myObject.admittingDiagnosisDesc = theList[i].admittingDiagnosisDesc;
        myObject.description = "";
        events.push(myObject);
    }

    $('#calendar').fullCalendar({
        defaultView: 'month',
        header: {
            left: '',
            center: 'title'
        },
        editable: false,
        selectable: true,
        events: events,
        dayClick: function() {
           // alert('a day has been clicked!');
        },
        eventClick: function(event, jsEvent, view) {
            showAppointmentDetails(event)
        }
    });
});

/*]]>*/

这是我的输出(fullcalendar_events_are_stored_in_same_date):

image

事件的开始日期不同,但它们存储在同一日期。需要帮助......

1 个答案:

答案 0 :(得分:0)

每次循环时都需要重新初始化myObject作为新对象,否则每次循环运行时都会用新值覆盖内存中的同一对象。

对象存储在数组中作为引用(而不是副本),因此当此数组传递给日历时,它会读取数组中的项并发现它们是相同的,因为它们都引用相同的源记忆中的物体。因此,为什么你的所有活动都在同一天。如果你检查它们,你会发现它们的所有属性都是相同的,而不仅仅是日期。

只需这样做:

  for (var i = 0; i < theList.length; i++) {
    var myObject = new Object(); //create a new object each time
    myObject.title = theList[i].title;
    myObject.start = new Date(theList[i].start);
    myObject.requestNumber = theList[i].requestNumber;
    myObject.locationId = theList[i].locationId;
    myObject.arrivalTime = theList[i].arrivalTime;
    myObject.admissionDate = new Date(theList[i].admissionDate);
    myObject.procedureDate = "-";
    myObject.admittingDiagnosisDesc = theList[i].admittingDiagnosisDesc;
    myObject.description = "";
    events.push(myObject);
  }

http://jsfiddle.net/sbxpv25p/50/给出了一个有效的例子。

然而,说了这么多,为什么你真的需要那个for循环并不是很清楚?我从代码中得到的印象是,无论如何,您的活动大部分都是正确的格式。除了descriptionprocedureDate之外,您只需按下默认值,循环只是制作相同数据的精确副本并将其放入新数组中。

我认为您可以在“events”参数中直接向fullCalendar提供“theList”,并获得相同的结果。请参阅此示例:http://jsfiddle.net/sbxpv25p/51/