現在のキャンバスの状態をおそらく JSON 文字列としてサーバー側のデータベースに保存し、後でloadFromJSON
. 通常、これは次を使用して簡単に実現できます。
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');
}
その後
function loadCanvas(json) {
// parse the data into the canvas
canvas.loadFromJSON(json);
// re-render the canvas
canvas.renderAll();
// optional
canvas.calculateOffset();
}
ただし、組み込みObject#set
メソッドを使用して、キャンバスに追加する生地オブジェクトにいくつかのカスタム属性も設定しています。
// 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();
問題は、サーバー側でリクエストを確認すると、カスタム属性がキャンバスから解析されず、他のすべてのものと一緒に送信されていることがわかります。これはおそらく、toObject
メソッドがオブジェクト クラスのデフォルト属性ではないものを削除する方法に関係しています。サーバーから送信された JSON 文字列からキャンバスを保存および復元でき、復元されたキャンバスにもカスタム属性が含まれるように、この問題に取り組む良い方法は何でしょうか? ありがとう。