Jelajahi Sumber

fixed issue 757 (removeEvents bug)

Adam Shaw 15 tahun lalu
induk
melakukan
679b9e48d6
2 mengubah file dengan 101 tambahan dan 4 penghapusan
  1. 5 4
      src/EventManager.js
  2. 96 0
      tests/issue_757_removeEvents.html

+ 5 - 4
src/EventManager.js

@@ -28,7 +28,6 @@ function EventManager(options, sources) {
 	var currentFetchID = 0;
 	var pendingSourceCnt = 0;
 	var loadingLevel = 0;
-	var dynamicEventSource = [];
 	var cache = [];
 	
 	
@@ -111,7 +110,8 @@ function EventManager(options, sources) {
 	-----------------------------------------------------------------------------*/
 	
 	
-	sources.push(dynamicEventSource);
+	// first event source is reserved for "sticky" events
+	sources.unshift([]);
 	
 
 	function addEventSource(source) {
@@ -175,8 +175,8 @@ function EventManager(options, sources) {
 		normalizeEvent(event);
 		if (!event.source) {
 			if (stick) {
-				dynamicEventSource.push(event);
-				event.source = dynamicEventSource;
+				sources[0].push(event);
+				event.source = sources[0];
 			}
 			cache.push(event);
 		}
@@ -205,6 +205,7 @@ function EventManager(options, sources) {
 			for (var i=0; i<sources.length; i++) {
 				if (typeof sources[i] == 'object') {
 					sources[i] = $.grep(sources[i], filter, true);
+					// TODO: event objects' sources will no longer be correct reference :(
 				}
 			}
 		}

+ 96 - 0
tests/issue_757_removeEvents.html

@@ -0,0 +1,96 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<script type='text/javascript' src='../src/_loader.js?debug'></script>
+<script type='text/javascript'>
+
+	$(document).ready(function() {
+	
+		var date = new Date();
+		var d = date.getDate();
+		var m = date.getMonth();
+		var y = date.getFullYear();
+		
+		$('#calendar').fullCalendar({
+			header: {
+				left: 'prev,next today',
+				center: 'title',
+				right: 'month,agendaWeek,basicWeek,agendaDay,basicDay'
+			},
+			editable: true,
+			//isRTL: true,
+			year: 2011,
+			month: 0,
+			events: [
+				{
+					title: 'All Day Event',
+					start: new Date(y, m, 1)
+				},
+				{
+					title: 'Long Event',
+					start: new Date(y, m, d-5),
+					end: new Date(y, m, d-2)
+				},
+				{
+					id: 999,
+					title: 'Repeating Event',
+					start: new Date(y, m, d-3, 16, 0),
+					allDay: false
+				},
+				{
+					id: 999,
+					title: 'Repeating Event',
+					start: new Date(y, m, d+4, 16, 0),
+					allDay: false
+				},
+				{
+					title: 'Meeting',
+					start: new Date(y, m, d, 10, 30),
+					allDay: false
+				},
+				{
+					title: 'Lunch',
+					start: new Date(y, m, d, 12, 5),
+					end: new Date(y, m, d, 14, 43),
+					allDay: false
+				},
+				{
+					title: 'Birthday Party',
+					start: new Date(y, m, d+1, 19, 0),
+					end: new Date(y, m, d+1, 22, 30),
+					allDay: false
+				},
+				{
+					title: 'Click for Google',
+					start: new Date(y, m, 28),
+					end: new Date(y, m, 29),
+					url: 'http://google.com/'
+				}
+			]
+		});
+		
+	});
+
+</script>
+<style type='text/css'>
+
+	body {
+		margin-top: 40px;
+		text-align: center;
+		font-size: 13px;
+		font-family: "Lucida Grande",Helvetica,Arial,Verdana,sans-serif;
+		}
+
+	#calendar {
+		width: 900px;
+		margin: 0 auto;
+		}
+
+</style>
+</head>
+<body>
+<button onclick="$('#calendar').fullCalendar('removeEvents')">removeEvents</button>
+<button onclick="$('#calendar').fullCalendar('renderEvent', { title:'hey', start:'2011-01-09' }, true)">addEvent (with stick)</button>
+<div id='calendar'></div>
+</body>
+</html>