tentone 5 gadi atpakaļ
vecāks
revīzija
399ba0847b
2 mainītis faili ar 2082 papildinājumiem un 2036 dzēšanām
  1. 2057 2022
      build/escher.js
  2. 25 14
      source/Object2D.js

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 2057 - 2022
build/escher.js


+ 25 - 14
source/Object2D.js

@@ -671,6 +671,11 @@ Object2D.prototype.parse = function(data, root)
 	this.restoreContextState = data.restoreContextState;
 	this.pointerInside = data.pointerInside;
 	this.beingDragged = data.beingDragged;
+
+	for(var i = 0; i < this.masks.length; i++)
+	{
+		data.masks.push(root.getChildByUUID(data.masks[i]));
+	}
 };
 
 /**
@@ -678,34 +683,40 @@ Object2D.prototype.parse = function(data, root)
  *
  * All objects should implement serialization methods to serialize and load data properly.
  *
+ * First all objects instances are created to ensure that object trying to get references to other object can have the data accessible, only then the parse method is called.
+ *
  * @static
  * @param {Object} data Object data loaded from JSON.
  * @return {Object2D} Parsed object data.
  */
 Object2D.parse = function(data)
 {
-	if(!Object2D.types.has(data.type))
-	{
-		throw new Error("Object type " + data.type + " unknown. Cannot parse data.");
-	}
+	var objects = [];
 
-	var object = new Object2D.types.get(data.type)();
+	function createObjectInstances(data) {
+		if(!Object2D.types.has(data.type))
+		{
+			throw new Error("Object type " + data.type + " unknown. Cannot parse data.");
+		}
 
-	object.parse(data);
+		var object = new Object2D.types.get(data.type)();
+		for(var i = 0; i < data.children.length; i++)
+		{
+			object.add(createObjectInstances(data.children[i]));
+		}
 
-	for(var i = 0; i < data.children.length; i++)
-	{
-		this.add(Object2D.parse(data.children[i]));
+		objects.push({object: object, data: data});
+
+		return object;
 	}
 
+	var object = createObjectInstances(data);
 
-	// TODO <ADD CODE HERE>
-	/*
-	for(var i = 0; i < this.masks.length; i++)
+	// Parse objects data
+	for(var i = 0; i < objects.length; i++)
 	{
-		data.masks.push(this.masks[i].uuid);
+		objects[i].object.parse(objects[i].data, object);
 	}
-	*/
 
 	return object;
 };

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels