我正在使用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
时,加载机制会中断。没有任何消息以任何方式呈现。
好的,终于找到了
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);
};
然后就可以加载了。希望这对其他人有帮助!
实际上我在fabric js 5.2.1中遇到了一些问题。我正在使用曲线文本库,但该库不支持 loadfromjson 函数,您能否指导我如何将曲线文本库集成到 Fabric js 中以实现我提到的支持功能?