Html5 canvas 使用Fabric.js在画布中重新加载JSON无法正确呈现

Html5 canvas 使用Fabric.js在画布中重新加载JSON无法正确呈现,html5-canvas,fabricjs,Html5 Canvas,Fabricjs,我对Fabric.js有点问题。我正在将一个JSON字符串加载到画布中,然后在将来的某个时候,我想再次加载更多的JSON(可能是相同的JSON)。第一次加载似乎工作正常,但第二次加载有一个问题:前景路径对象不显示,即使其边界框可单击。我不确定这是否与背景图像有关,或者在再次加载JSON之前清除画布的方式,或者加载JSON的实际方式(或者全部三种方式)有关 我放了一把简单的小提琴 我从JSON对象创建初始画布视图,然后在3秒钟后将其清除,然后在3秒钟后再次加载它(这只是为了模拟在真实应用程序中单击

我对Fabric.js有点问题。我正在将一个JSON字符串加载到画布中,然后在将来的某个时候,我想再次加载更多的JSON(可能是相同的JSON)。第一次加载似乎工作正常,但第二次加载有一个问题:前景路径对象不显示,即使其边界框可单击。我不确定这是否与背景图像有关,或者在再次加载JSON之前清除画布的方式,或者加载JSON的实际方式(或者全部三种方式)有关

我放了一把简单的小提琴

我从JSON对象创建初始画布视图,然后在3秒钟后将其清除,然后在3秒钟后再次加载它(这只是为了模拟在真实应用程序中单击按钮或任何东西)

如果这件事以前处理过,我们将非常感谢您的帮助,并表示歉意

干杯


[编辑]我注意到,如果我将JSON对象复制到第二个变量中,以便初始化两个具有相同内容的对象,并在第二个循环中加载,它将再次正确加载。原始JSON变量是否会被修改或缓存,这是导致问题的原因?(为这个

我检查了您生成的对象,发现当您第二次加载svg时,所有的“路径”对象都丢失了。

通过在第一次加载之前添加一个console.log,在第二次加载之前添加另一个console.log,您也可以看到它。 像这样:

console.log(JSON.stringify(j));
总之,说到点子上, 您只需在加载对象之前对其进行字符串化,这样您就可以将所有对象保持为一个

我添加了一行代码,将svg对象转换为json字符串,并将其传递给临时变量

tmp = JSON.stringify( j );
看一看,我在小提琴上更新了你的代码:

如果你认为我的答案正确,请把它标记为正确。
祝你好运

谢谢Theo!虽然我仍然很好奇问题的起因,但我非常高兴你的答案是正确的,因为它可以解决问题。干杯:)
tmp = JSON.stringify( j );