2015-10-20 134 views
0

我正在創建一個隨用戶時間表,其中用戶選擇具有成員列表和旋轉長度和類型的組。當用戶點擊「創建時間表」按鈕時,表示該輪換時間表的日曆上將顯示事件列表。事件被創建並添加到事件數組中,但不會顯示在日曆上。當代碼到達時,fullcalendar addEventSource未向日歷中添加事件數組

$('#edit_calendar').fullCalendar('addEventSource', newEvents); 

應用程序只是掛起並且沒有事件顯示在日曆上。 這是被稱爲Click事件功能:

$("#rotation_schedule_btn").click(function() { 
    //create member list order  
    var memberList = [];   
    $("#rotationList li").each(function() { 
     memberList.push({ 
      id: $(this).attr('id'), 
      name: $(this).text(), 
      color: $(this).css('background-color') 
     }) 
    }); 

    //start and end date and time for new schedule 
    var startDate = new Date($('#schedule_start_date').val()); 
    var endDate = new Date($('#schedule_end_date').val()); 

    //remove events between startDate & endDate 
    $('#edit_calendar').fullCalendar('removeEvents', function (event) { 
     if (event.start.toDate() >= startDate && event.start.toDate() <= endDate 
       || event.end.toDate() >= startDate && event.end.toDate() <= endDate) { 
      return true; 
     } 
    }); 

    //Create events from rotation schedule selected 
    var newEvents = []; 
    var rotation_length = $('#rotation_type_select option:selected').val(); 
    var rotation_start_date = new Date(startDate); 
    var rotation_end_date = new Date(rotation_start_date); 
    rotation_end_date.setDate(rotation_end_date.getDate() + parseInt(rotation_length)); 
    rotation_end_date.setMinutes(rotation_end_date.getMinutes() - 1); 
    var member_index = 0; 
    while (rotation_end_date <= endDate) 
    { 
     var event = new Object(); 
     event = { 
      title: memberList[member_index].name, 
      start: rotation_start_date, 
      end: rotation_end_date,    
      objectID: memberList[member_index].id, 
      color: memberList[member_index].color, 
      allDay: true, 
      textColor: 'black' 
     }; 
     newEvents.push(event); 

     rotation_start_date.setDate(rotation_start_date.getDate() + parseInt(rotation_length));   
     rotation_end_date.setDate(rotation_end_date.getDate() + parseInt(rotation_length)); 

     if ((memberList.length - 1) == member_index) 
     { 
      member_index = 0; 
     } 
     else { 
      member_index++; 
     } 
    }   
    //Render events on calendar 
    $('#edit_calendar').fullCalendar('addEventSource', newEvents); 
}); //end create schedule button click 

爲什麼不會在日曆上顯示newEvents陣列顯示器? 如果您能告訴我我出錯的地方,我將不勝感激。

謝謝。

UPDATE 在檢查newEvents數組後,似乎所有的開始和結束日期都是相同的。有3個事件,每個事件應該持續1周(7天)。但是所有的事件都有相同的開始和結束日期。

+0

你能可能要添加一個小提琴?如果我們可以玩弄實際運行的代碼,將會更容易找到錯誤。 – Anders

回答

1

我想我知道發生了什麼。在這種情況下,你傳遞一個引用您的活動對象,而不是價值rotation_start_date和rotation_end_date:

event = { 
     title: memberList[member_index].name, 
     start: rotation_start_date, 
     end: rotation_end_date,    
     objectID: memberList[member_index].id, 
     color: memberList[member_index].color, 
     allDay: true, 
     textColor: 'black' 
    }; 

你更新說,這些日期的價值觀,所有的事件看到同樣的更新,因爲它們都具有瞬間對這些對象的引用相同。你想要做什麼或者是宣佈將在您的循環中保持價值或者只是設置事件的開始和結束日期,使用從rotation_start_date和你沒」值rotation_end_date

var event = new Object(); 
    event = { 
     title: 'title', 
     start: new Date(rotation_start_date), 
     end: new Date(rotation_end_date), 
     objectID: member_index, 
     color: 'blue', 
     allDay: true, 
     textColor: 'black' 
    }; 

一個新的日期新變量牛逼提供任何代碼,但我創建了一些示例代碼的jsfiddle測試了這一點fullcalendar example

+0

謝謝。我會試試看看它是否會改變任何事情。 –

+0

這樣做。下面我展示瞭如何更新開始日期和結束日期。 –

0

最終的答案:

while (rotation_end_date <= endDate) 
    { 
     var event = new Object(); 
     event = { 
      title: memberList[member_index].name, 
      start: new Date(rotation_start_date), 
      end: new Date(rotation_end_date), 
      objectID: memberList[member_index].id, 
      color: memberList[member_index].color, 
      allDay: true, 
      textColor: 'black' 
     }; 
     newEvents.push(event); 

     rotation_start_date = new Date(rotation_start_date.setDate(rotation_start_date.getDate() + parseInt(rotation_length))); 
     rotation_end_date = new Date(rotation_end_date.setDate(rotation_end_date.getDate() + parseInt(rotation_length)));