Przeglądaj źródła

fix standard props being transferred

Adam Shaw 8 lat temu
rodzic
commit
1cbbd97dc1
1 zmienionych plików z 22 dodań i 18 usunięć
  1. 22 18
      src/models/event/EventDef.js

+ 22 - 18
src/models/event/EventDef.js

@@ -128,40 +128,41 @@ var EventDef = Class.extend({
 	// -----------------------------------------------------------------------------------------------------------------
 
 
-	handledStandardPropMap: {},
-	verbatimStandardPropMap: {},
+	standardPropMap: {},
 	standardPropHandlers: [],
 
 
 	isStandardProp: function(propName) {
-		return this.verbatimStandardPropMap[propName] ||
-			this.handledStandardPropMap[propName];
+		return this.standardPropMap[propName];
 	},
 
 
 	applyStandardProps: function(rawProps) {
+		var map = this.standardPropMap;
 		var handlers = this.standardPropHandlers;
 		var rawHandled = {}; // to be handled
+		var success = true;
 		var propName;
 		var i;
 
-		for (propName in this.handledStandardPropMap) {
+		for (propName in map) {
 			if (rawProps[propName] != null) {
-				rawHandled[propName] = rawProps[propName];
+				if (map[propName]) { // has handler?
+					rawHandled[propName] = rawProps[propName];
+				}
+				else { // verbatim
+					this[propName] = rawProps[propName];
+				}
 			}
 		}
 
 		for (i = 0; i < handlers.length; i++) {
 			if (handlers[i].call(this, rawProps) === false) {
-				return false;
+				success = false;
 			}
 		}
 
-		for (propName in this.verbatimStandardPropMap) {
-			if (rawProps[propName] != null) {
-				this[propName] = rawProps[propName];
-			}
-		}
+		return success;
 	}
 
 });
@@ -190,11 +191,11 @@ EventDef.generateId = function() {
 
 EventDef.defineStandardPropHandler = function(propNames, handler) {
 	var proto = this.prototype;
-	var map = proto.handledStandardPropMap = $.extend({}, proto.handledStandardPropMap);
+	var map = proto.standardPropMap = $.extend({}, proto.standardPropMap);
 	var i;
 
 	for (i = 0; i < propNames.length; i++) {
-		map[propNames[i]] = true;
+		map[propNames[i]] = true; // true means "uses handler"
 	}
 
 	proto.standardPropHandlers = proto.standardPropHandlers.concat(handler);
@@ -203,21 +204,24 @@ EventDef.defineStandardPropHandler = function(propNames, handler) {
 
 EventDef.defineVerbatimStandardProps = function(propNames) {
 	var proto = this.prototype;
-	var map = proto.verbatimStandardPropMap = $.extend({}, proto.verbatimStandardPropMap);
+	var map = proto.standardPropMap = $.extend({}, proto.standardPropMap);
 	var i;
 
 	for (i = 0; i < propNames.length; i++) {
-		map[propNames[i]] = true;
+		map[propNames[i]] = false; // false means "copy verbatim"
 	}
 };
 
 
 EventDef.copyVerbatimStandardProps = function(src, dest) {
-	var map = this.prototype.verbatimStandardPropMap;
+	var map = this.prototype.standardPropMap;
 	var propName;
 
 	for (propName in map) {
-		if (src[propName] != null) {
+		if (
+			src[propName] != null &&
+			!map[propName] // falsy means "copy verbatim"
+		) {
 			dest[propName] = src[propName];
 		}
 	}