Fabric.js - cómo guardar un lienzo en el servidor con atributos personalizados

Me gustaría poder guardar el estado del lienzo actual en una base de datos del lado del servidor, probablemente como una cadena JSON, y luego restaurarla conloadFromJSON. Típicamente, esto se logra fácilmente usando:

var canvas = new fabric.Canvas();
function saveCanvas() {
    // convert canvas to a json string
    var json = JSON.stringify( canvas.toJSON() );

    // save via xhr
    $.post('/save', { json : json }, function(resp){ 
        // do whatever ...
    }, 'json');
}

Y entonces

function loadCanvas(json) {

  // parse the data into the canvas
  canvas.loadFromJSON(json);

  // re-render the canvas
  canvas.renderAll();

  // optional
  canvas.calculateOffset();
}

Sin embargo, también he estado configurando algunos atributos personalizados en los objetos de tela que estoy agregando al lienzo usando la función incorporadaObject#set método:

// get some item from the canvas
var item = canvas.item(0);

// add misc properties
item.set('wizard', 'gandalf');
item.set('hobbit', 'samwise');

// save current state
saveCanvas();

El problema es que cuando reviso la solicitud en el lado del servidor, veo que mis atributos personalizados no se analizaron en el lienzo y se enviaron junto con todo lo demás. Esto probablemente tiene que ver con cómotoObject el método elimina todo lo que no sea un atributo predeterminado en la clase de objeto. ¿Cuál sería una buena manera de abordar este problema, de modo que podré ahorrary restaurar el lienzo desde una cadena JSON enviada por el servidor, y el lienzo restaurado también incluirá mis atributos personalizados? Gracias.

Respuestas a la pregunta(4)

Su respuesta a la pregunta