소스 검색

trigger event render queue stuff gone. "creative" alternate solution

Adam Shaw 8 년 전
부모
커밋
7d56d0a9e2
4개의 변경된 파일50개의 추가작업 그리고 35개의 파일을 삭제
  1. 13 0
      src/Calendar.js
  2. 35 0
      src/Calendar.render.js
  3. 0 28
      src/View.js
  4. 2 7
      src/common/RenderQueue.js

+ 13 - 0
src/Calendar.js

@@ -27,6 +27,19 @@ var Calendar = FC.Calendar = Class.extend(EmitterMixin, {
 		this.initEventManager();
 
 		this.renderQueue = this.buildRenderQueue();
+
+		this.on('afterRenderInit:date', function() {
+			this.view.onAfterBaseRender();
+		});
+		this.on('beforeRenderDestroy:date', function() {
+			this.view.onBeforeBaseUnrender();
+		});
+		this.on('afterRenderInit:event', function() {
+			this.view.onAfterEventsRender();
+		});
+		this.on('beforeRenderDestroy:event', function() {
+			this.view.onBeforeEventsUnrender();
+		});
 	},
 
 

+ 35 - 0
src/Calendar.render.js

@@ -132,12 +132,40 @@ Calendar.mixin({
 
 	buildRenderQueue: function() {
 		var _this = this;
+
+		var inits = [];
+		var initMap = {};
+		var destroys = [];
+		var destroyMap = {};
+
 		var renderQueue = new RenderQueue({
 			event: this.opt('eventRenderWait')
 		});
 
+		renderQueue.on('push', function(task) {
+			if (task.actionType === 'init') {
+				if (!initMap[task.namespace]) {
+					inits.push(task.namespace);
+					initMap[task.namespace] = true;
+				}
+			}
+			else if (task.actionType === 'destroy') {
+				if (!destroyMap[task.namespace]) {
+					destroys.push(task.namespace);
+					destroyMap[task.namespace] = true;
+				}
+			}
+		});
+
 		renderQueue.on('start', function() {
 			var view = _this.view;
+			var i;
+
+			for (i = 0; i < destroys.length; i++) {
+				_this.trigger('beforeRenderDestroy:' + destroys[i]);
+			}
+			destroys = [];
+			destroyMap = {};
 
 			_this.freezeContentHeight();
 			view.addScroll(view.queryScroll()); // TODO: move to Calendar
@@ -145,12 +173,19 @@ Calendar.mixin({
 
 		renderQueue.on('stop', function() {
 			var view = _this.view;
+			var i;
 
 			if (_this.updateViewSize()) { // success?
 				view.popScroll(); // TODO: move to Calendar
 			}
 
 			_this.thawContentHeight();
+
+			for (i = 0; i < inits.length; i++) {
+				_this.trigger('afterRenderInit:' + inits[i]);
+			}
+			inits = [];
+			initMap = {};
 		});
 
 		return renderQueue;

+ 0 - 28
src/View.js

@@ -217,20 +217,6 @@ var View = FC.View = InteractiveDateComponent.extend({
 	// -----------------------------------------------------------------------------------------------------------------
 
 
-	requestDateRender: function(dateProfile) {
-		InteractiveDateComponent.prototype.requestDateRender.apply(this, arguments);
-
-		this.requestRender('date', 'init-trigger', this.onAfterBaseRender);
-	},
-
-
-	requestDateUnrender: function() {
-		this.requestRender('date', 'destroy-trigger', this.onBeforeBaseUnrender);
-
-		InteractiveDateComponent.prototype.requestDateUnrender.apply(this, arguments);
-	},
-
-
 	// if dateProfile not specified, uses current
 	executeDateRender: function(dateProfile, skipScroll) {
 
@@ -465,20 +451,6 @@ var View = FC.View = InteractiveDateComponent.extend({
 	// -----------------------------------------------------------------------------------------------------------------
 
 
-	requestEventsRender: function(eventsPayload) {
-		InteractiveDateComponent.prototype.requestEventsRender.apply(this, arguments);
-
-		this.requestRender('event', 'init-trigger', this.onAfterEventsRender);
-	},
-
-
-	requestEventsUnrender: function() {
-		this.requestRender('event', 'destroy-trigger', this.onBeforeEventsUnrender);
-
-		InteractiveDateComponent.prototype.requestEventsUnrender.apply(this, arguments);
-	},
-
-
 	executeEventsRender: function(eventsPayload) {
 		if (this.renderEvents) { // for legacy custom views
 			this.renderEvents(convertEventsPayloadToLegacyArray(eventsPayload));

+ 2 - 7
src/common/RenderQueue.js

@@ -62,7 +62,7 @@ var RenderQueue = TaskQueue.extend({
 	kill: function() {
 		this.isKilled = true;
 		this.q = this.q.filter(function(task) {
-			return task.actionType === 'destroy-trigger' || task.actionType === 'destroy';
+			return task.actionType === 'destroy';
 		});
 	},
 
@@ -120,12 +120,7 @@ var RenderQueue = TaskQueue.extend({
 						shouldAppend = false;
 					}
 
-					if (task.actionType === 'destroy-trigger' && shouldAppend) {
-						; // a destroy will still happen, so keep this task
-					}
-					else {
-						q.splice(i, 1); // remove task
-					}
+					q.splice(i, 1); // remove task
 				}
 			}
 		}