我有2个JSON对象:
jSONObject1
{"类型":"组"" originX":"左"" originY":& #34;顶部""左":0,"顶部":0,"对象&#34 ;: [{"类型":"线""中风":"灰"" X 1":430,& #34; X 2":20.0," Y 1":430," Y2":430}, {"类型":"线""中风":"灰"" X 1":430,&# 34; X 2":20.0," Y 1":20.0," Y2":20.0} {"类型":"线""中风":"灰"" X 1":430,&# 34; X 2":430," Y 1":20.0," Y2":430}, {"类型":"线""中风":"灰"" X 1":20.0,&# 34; X 2":20.0," Y 1":430," Y2":20.0}]}
包含要在画布上绘制的线条数组,构成建筑平面布置图
jSONObject2
{"类型":"组"" originX":"左"" originY":& #34;顶部""左":0,"顶部":0, "对象":[{"类型":" RECT"" originX":"左"&#34 ; originY":"顶部""左":45,"顶部": - 405"宽度":60,& #34;高度" 60"填充":"红色"}, {"类型":" RECT"" originX":"左"" originY":"顶部""左" 105"顶部": - 405.0,"宽度" 60"高度":60, "填充":"红色"}, {"类型":" RECT"" originX":"左"" originY":"顶部""左" 165"顶部": - 405.0,"宽度" 60"高度":60, "填充":"蓝色"}, {"类型":" RECT"" originX":"左"" originY":"顶部""左" 225"顶部": - 405.0,"宽度" 60"高度":60, "填充":"蓝色"}]}
包含要在画布上绘制的矩形数组,用于显示平面布置图中不同点的指标。
我使用.loadFromJSON(...)在画布上渲染所需的线条/矩形。问题是,每次调用此函数时,它都会完全替换画布上的所有内容,而不是覆盖平面图上的平面图度量矩形。
将2个独立的JSON对象渲染到Canvas元素上而没有覆盖另一个的最佳方法是什么?
我查看this GitHub issue建议使用 fromObject()方法从JSON添加对象而不清除整个画布。从理论上讲,这听起来像是一个不错的主意...这个页面也引出了2个jsfiddle"例子"如何使用这个fromObject方法,one of which doesn't even work和其他一个似乎工作但很不清楚。
尝试使用loadFromJSON()(覆盖):
Canvas canvas = document.getElementById("myCanvas");
canvas.loadFromJSON(JSON.stringify(jSONObject1))
canvas.loadFromJSON(JSON.stringify(jSONObject2))
canvas.renderAll();
尝试使用fromObject()(没有工作)
var jSONObjects = jSONObject1.concat(jSONObject2);
for (var i = 0; i < jSONObjects.length; i++) {
var klass = fabric.util.getKlass(jSONObjects[i].type);
var obj = klass.fromObject(jSONObjects[i]);
canvas.add(obj);
}
canvas.renderAll();
提前致谢。
答案 0 :(得分:3)
如果查看loadFromJSON的代码,每次都会清除画布。
loadFromJSON: function (json, callback, reviver) {
if (!json) {
return;
}
// serialize if it wasn't already
var serialized = (typeof json === 'string')
? JSON.parse(json)
: json;
this.clear();
var _this = this;
this._enlivenObjects(serialized.objects, function () {
_this._setBgOverlay(serialized, callback);
}, reviver);
return this;
},
您需要连接两个JSON对象。
答案 1 :(得分:2)
我从未尝试过fromObject()方法。
我首先尝试使用concat合并两个JSON对象,然后使用loadFromJson()。
var finalFloorPlan = jSONObject1.concat(jSONObject2);