Me gustaría poder guardar el estado del lienzo actual en una base de datos del servidor, probablemente como una cadena JSON, y luego restaurarlo con loadFromJSON
. Por lo general, esto se logra fácilmente usando:Fabric.js - cómo guardar lienzo en el servidor con atributos personalizados
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 luego
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 fijando unos pocos atributos personalizados de los objetos de tela que estoy añadiendo a la lona mediante la orden interna Object#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 puedo comprobar la solicitud en el lado del servidor, veo que mis atributos personalizados no se analizan desde el lienzo y se envían junto con todo lo demas. Esto probablemente tiene que ver con cómo el método toObject
elimina cualquier cosa que no sea un atributo predeterminado en la clase de objeto. ¿Cuál sería una buena forma de abordar este problema, de modo que pueda guardar y restaurar el lienzo desde una cadena JSON enviada por el servidor, y el lienzo restaurado también incluirá mis atributos personalizados? Gracias.
Excelente respuesta, y funcionó como un encanto. ¡Gracias! – sa125
En realidad, me aparece un error al intentar cargar el lienzo desde la cadena JSON. Estoy usando 'canvas.loadFromDatalessJSON (json)', que anteriormente funcionaba con 'fabric.Image'. Ahora que estoy usando 'fabric.NamedImage' como se sugirió anteriormente, obtengo' no puedo llamar al método 'setupState' of undefined'. ¿Cómo puedo arreglar esto? – sa125
Parece ser un error en 'toDatalessJSON':/Tenemos cierta lógica de duplicación en toJSON y toDatalessJSON y quiero reescribir todo eso, haciéndolo agradable, limpio y consistente. Hará en algún momento en un futuro cercano. – kangax