Deserializar un objeto JSON en Fabric.js
Estoy desarrollando una pizarra colaborativa utilizando fabricjs. Cuando un usuario crea un nuevo objeto de estructura, lo serializo y lo envío a todos los demás usuarios.
var rect = new fabric.Rect();
canvas.add(rect);
socket.emit("newObject", JSON.stringify(rect)); // sends the object to other users
Cuando esos usuarios reciben el objeto serializado, deben deserializarse y agregarse a su lienzo. ¿Cuál es la mejor manera de hacer esto? No pude encontrar una función que deserialice un solo objeto, solo el lienzo completo (loadFromJSON), así que implementé una solución poco elegante:
function drawRoomObjects(roomObjects){
var canvasString = "{\"objects\":[";
for(var roomObjectKey in roomObjects){
canvasString += roomObjects[roomObjectKey];
}
canvasString += "], \"background\":\"\"}";
var tmpCanvas = new fabric.Canvas();
tmpCanvas.loadFromJSON(canvasString);
for(var k in tmpCanvas.getObjects()) {
canvas.add(tmpCanvas._objects[k]);
}
canvas.renderAll();
}
¿Alguna sugerencia para una mejor manera de hacerlo?