Бих искал да мога да запазя текущото състояние на canvas в база данни от страната на сървъра, вероятно като 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 низ, изпратен от сървъра, и възстановеното платно също да включва моя персонализиран атрибути? Благодаря.