Ich möchte in der Lage sein, den aktuellen Canvas-Status in einer serverseitigen Datenbank zu speichern, wahrscheinlich als JSON-String, und ihn später mit loadFromJSON
wiederherzustellen . Typischerweise wird dies leicht erreicht werden:Fabric.js - So speichern Sie Canvas auf dem Server mit benutzerdefinierten Attributen
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');
}
Und dann
function loadCanvas(json) {
// parse the data into the canvas
canvas.loadFromJSON(json);
// re-render the canvas
canvas.renderAll();
// optional
canvas.calculateOffset();
}
Allerdings habe ich auch ein paar eigene worden Einstellung Attribute auf die textilen Objekten ich auf die Leinwand Zugabe bin mit dem builtin Object#set
Methode:
// 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();
Das Problem ist, dass, wenn ich die Anfrage auf der Server-Seite zu überprüfen, ich sehe, dass meine benutzerdefinierten Attribute nicht von der Leinwand analysiert wurden und schickten zusammen mit alles andere. Dies hat wahrscheinlich damit zu tun, wie die Methode toObject
alles entfernt, was kein Standardattribut in der Objektklasse ist. Was wäre ein guter Weg, um dieses Problem anzugehen, so dass ich und sowohl die Canvas aus einer JSON-Zeichenfolge vom Server gesendet speichern kann, und die wiederhergestellte Leinwand wird auch meine benutzerdefinierten Attribute enthalten? Vielen Dank.
Ausgezeichnete Antwort und arbeitete wie ein Charme. Vielen Dank! – sa125
Ich erhalte tatsächlich einen Fehler, wenn ich versuche, die Leinwand aus der JSON-Zeichenfolge zurück zu laden. Ich benutze 'canvas.loadFromDatalessJSON (json)', das vorher mit 'fabric.Image' gearbeitet hat. Nun, da ich das 'fabric.NamedImage' verwende, wie oben vorgeschlagen, bekomme ich' 'kann nicht Methode 'setupState' von undefined aufrufen. Wie kann ich das beheben? – sa125
Scheint ein Fehler in 'toDatelessJSON' zu sein:/Wir haben eine duplizierende Logik in toJSON und toDatelessJSON und ich möchte das alles neu schreiben, was es nett, sauber und konsistent macht. Wird irgendwann in naher Zukunft tun. – kangax