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.