通过 JSON 加载 curveText 在 FabricJS 1.7.3 中不再起作用

问题描述 投票:0回答:2

我正在使用fabricjs的优秀插件,来自https://github.com/EffEPi/fabric.curvedText

的“curvedText”

这很好用,但是最近对 Fabricjs 的更新使插件停止通过 JSON 加载。以下片段证明了这一点。

除了使用的 FabricJS 版本之外,以下两个片段完全相同。

1.7.2版本:

$(function () 
{
  canvas = new fabric.Canvas('c');
    var CurvedText = new fabric.CurvedText('CurvedText',
    {
        left: 100,top: 20,
        textAlign: 'center',
        fill: '#0000FF',radius: 150,
        fontSize: 20,spacing: 20
    });
    canvas.add(CurvedText).renderAll();

  $('#save').click(function() {
  	var design = JSON.stringify(canvas.toJSON());
    canvas.clear();
    canvas.renderAll();
    canvas.loadFromJSON(design, function() {
      console.log('loaded');      
      canvas.renderAll();
    });
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.2/fabric.js"></script>
<script src="//cdn.rawgit.com/EffEPi/fabric.curvedText/master/fabric.curvedText.js"></script>
<canvas id="c" width="400" height="160"></canvas><br/>
<button id="save">Save/Reload</button>

1.7.3版本:

$(function () 
{
  canvas = new fabric.Canvas('c');
    var CurvedText = new fabric.CurvedText('CurvedText',
    {
        left: 100,top: 20,
        textAlign: 'center',
        fill: '#0000FF',radius: 150,
        fontSize: 20,spacing: 20
    });
    canvas.add(CurvedText).renderAll();

  $('#save').click(function() {
  	var design = JSON.stringify(canvas.toJSON());
    canvas.clear();
    canvas.renderAll();
    canvas.loadFromJSON(design, function() {
      console.log('loaded');      
      canvas.renderAll();
    });
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.3/fabric.js"></script>
<script src="//cdn.rawgit.com/EffEPi/fabric.curvedText/master/fabric.curvedText.js"></script>
<canvas id="c" width="400" height="160"></canvas><br/>
<button id="save">Save/Reload</button>

1.7.2。版本工作正常,1.7.3。版本没有。保存过程看起来不错,但加载 JSON 时似乎没有任何反应。

查看 1.7.3 的发行说明(https://github.com/kangax/fabric.js/releases/tag/v1.7.3)似乎有以下更改:

“改进:loadFromJSON 中更好的错误管理#3586”

...可能要负责。有什么想法吗?

补充

没有控制台错误,也没有网络错误。如上所述,除了所使用的结构版本之外,脚本是相同的。我所说的 JSON 是由 Fabric 本身生成的。这允许保存和加载设计。单击“保存/重新加载”按钮会生成 JSON,然后重新加载(作为测试)。当加载包含

JSON
项目的
curvedText
时,加载机制会中断。没有任何消息以任何方式呈现。

javascript fabricjs
2个回答
4
投票

好的,终于找到了

fabric.curvedText.js
中的bug。嗯,
fabricjs
enlivenObjects
函数中的代码从1.7.2开始已经改变了。至 1.7.3。导致 curveText 对象停止加载。

如果将 Fabric.CurvedText 中的

fromObject
代码更改为:

fabric.CurvedText.fromObject=function (object)
{
    return new fabric.CurvedText(object.text, clone(object));
};

对此:

fabric.CurvedText.fromObject=function (object, callback)
{
    var newObject = new fabric.CurvedText(object.text, clone(object));
    if(typeof callback !== "undefined")
        callback(newObject, false);
    else
        return(newObject);
};

然后就可以加载了。希望这对其他人有帮助!


0
投票

实际上我在fabric js 5.2.1中遇到了一些问题。我正在使用曲线文本库,但该库不支持 loadfromjson 函数,您能否指导我如何将曲线文本库集成到 Fabric js 中以实现我提到的支持功能?

© www.soinside.com 2019 - 2024. All rights reserved.