Просмотр исходного кода

event change processing fixes, round 1000

Adam Shaw 8 лет назад
Родитель
Сommit
c7894f283e
3 измененных файлов с 32 добавлено и 40 удалено
  1. 10 20
      src/View.js
  2. 12 17
      src/component/DateComponent.js
  3. 10 3
      src/models/EventPeriod.js

+ 10 - 20
src/View.js

@@ -29,8 +29,6 @@ var View = FC.View = InteractiveDateComponent.extend({
 	nowIndicatorTimeoutID: null, // for refresh timing of now indicator
 	nowIndicatorIntervalID: null, // "
 
-	isEventsDefined: false,
-
 
 	constructor: function(calendar, viewSpec) {
 		this.calendar = calendar;
@@ -195,24 +193,19 @@ var View = FC.View = InteractiveDateComponent.extend({
 
 
 	bindEventChanges: function() {
-		this.listenTo(this.calendar.eventManager, 'receive', this.handleEventsReceived);
+		this.listenTo(this.calendar.eventManager, 'receive', this._handleEventsChanged);
 	},
 
 
-	unbindEventChanges: function() {
-		this.stopListeningTo(this.calendar.eventManager, 'receive');
+	_handleEventsChanged: function(changeset) {
+		this.startBatchRender();
+		this.handleEventsChanged(changeset);
+		this.stopBatchRender();
 	},
 
 
-	handleEventsReceived: function(changeset) {
-		if (!this.isEventsDefined) {
-			this.isEventsDefined = true;
-			this.handleEventsDefined();
-		}
-
-		if (!changeset.isEmpty()) {
-			this.handleEventsChanged(changeset);
-		}
+	unbindEventChanges: function() {
+		this.stopListeningTo(this.calendar.eventManager);
 	},
 
 
@@ -754,18 +747,15 @@ View.watch('businessHours', [ 'businessHourGenerator', 'dateProfile' ], function
 
 
 View.watch('bindingEvents', [ 'dateProfile' ], function(deps) {
+	this.handleEventsBound();
 	this.requestEvents(deps.dateProfile);
 
 	if (this.calendar.eventManager.isFinalized()) {
-		this.handleEventsReceived(this.calendar.eventManager.getFinalizedEvents());
+		this._handleEventsChanged(this.calendar.eventManager.getFinalizedEvents());
 	}
 
 	this.bindEventChanges();
 }, function() {
 	this.unbindEventChanges();
-
-	if (this.isEventsDefined) {
-		this.isEventsDefined = false;
-		this.handleEventsUndefined();
-	}
+	this.handleEventsUnbound();
 });

+ 12 - 17
src/component/DateComponent.js

@@ -23,7 +23,7 @@ var DateComponent = FC.DateComponent = Component.extend({
 
 	isDatesRendered: false,
 	isEventsRendered: false,
-	eventChangeset: null,
+	eventInstanceRepo: null,
 
 
 	constructor: function() {
@@ -261,21 +261,18 @@ var DateComponent = FC.DateComponent = Component.extend({
 	// -----------------------------------------------------------------------------------------------------------------
 
 
-	handleEventsDefined: function() {
-		this.eventInstanceRepo = new EventInstanceChangeset();
-
-		if (this.hasOwnEventRendering()) {
-			if (this.has('displayingEvents')) {
-				this.requestEventRender(this.eventInstanceRepo); // render empty
-			}
-		}
-
-		this.callChildren('handleEventsDefined', arguments);
+	handleEventsBound: function() {
+		this.callChildren('handleEventsBound', arguments);
 	},
 
 
 	handleEventsChanged: function(changeset) {
 		if (this.hasOwnEventRendering()) {
+
+			if (!this.eventInstanceRepo) {
+				this.eventInstanceRepo = new EventInstanceChangeset();
+			}
+
 			this.eventInstanceRepo.addChangeset(changeset);
 
 			if (this.has('displayingEvents')) {
@@ -287,12 +284,10 @@ var DateComponent = FC.DateComponent = Component.extend({
 	},
 
 
-	handleEventsUndefined: function() {
+	handleEventsUnbound: function() {
 		this.eventInstanceRepo = null;
 
-		// stopDisplayingEvents handles the unrender
-
-		this.callChildren('handleEventsUndefined', arguments);
+		this.callChildren('handleEventsUnbound', arguments);
 	},
 
 
@@ -310,14 +305,14 @@ var DateComponent = FC.DateComponent = Component.extend({
 			this.eventRenderer.rangeUpdated();
 		}
 
-		if (this.eventInstanceRepo) { // events defined yet?
+		if (this.eventInstanceRepo) {
 			this.requestEventRender(this.eventInstanceRepo);
 		}
 	},
 
 
 	stopDisplayingEvents: function() {
-		if (this.eventInstanceRepo) { // events ever defined?
+		if (this.eventInstanceRepo) {
 			this.requestEventUnrender();
 		}
 	},

+ 10 - 3
src/models/EventPeriod.js

@@ -269,9 +269,16 @@ var EventPeriod = Class.extend(EmitterMixin, {
 	trySendOutbound: function() {
 		var outboundChangeset = this.outboundChangeset;
 
-		if (this.isFinalized() && outboundChangeset) {
-			this.outboundChangeset = null;
-			this.trigger('receive', outboundChangeset);
+		if (this.isFinalized()) {
+			if (outboundChangeset) {
+				this.outboundChangeset = null;
+				this.trigger('receive', outboundChangeset);
+			}
+			else {
+				// hack for eventAfterAllRender
+				// also for DateComponents to know an empy, but populated, state
+				this.trigger('receive', new EventInstanceChangeset());
+			}
 		}
 	},