我一直在尝试按照example实现我的图形图像的导出,我一直在运行Dygraph.createCanvas不是函数错误。
下载上一个链接的本地副本并使其正常工作,然后尝试从
更改指向Dygraphs库的链接<script type="text/javascript" src="http://dygraphs.com/dygraph-dev.js"></script>
到
<script type="text/javascript" src="http://dygraphs.com/2.0.0/dygraph.js"></script>
在我的应用程序中使用,然后抛出Dygraph.createCanvas不再是一个函数。
我缺少什么,函数似乎存在于库中,为什么代码看不到它?
答案 0 :(得分:1)
我遇到了同样的问题。我为它创建了一个jsfiddle: https://jsfiddle.net/n3kozcu1/1/
function export_chart() {
var img = document.getElementById('demoimg')
Dygraph.Export.asPNG(g, img);
}
$("#button").click(export_chart);
小提琴看起来有点奇怪,因为dygraph-export似乎没有放在任何地方的CDN上,所以我不得不将它全部粘贴进去。但是,我链接到上游,所以你可以看到我不是使用旧版本。
超级简单的人为例子,同样的演示网站。它不起作用。失败:
“Uncaught TypeError:Dygraph.createCanvas不是函数”
编辑: 所以,看看dygraph-utils代码: https://github.com/danvk/dygraphs/blob/aaec6de56dba8ed712fd7b9d949de47b46a76ccd/src/dygraph-utils.js
Dygraphs.createCanvas只是一个创建画布的衬里。所以,我将dygraphs-export中的相关行更改为:
canvas = document.createElement('canvas');
它有效,但它在下一行调用了Dygraph.update。所以,我发现并将其修补到Dygraph.Export
Dygraph.Export.hack_update = function(self, o) {
if (typeof(o) != 'undefined' && o !== null) {
for (var k in o) {
if (o.hasOwnProperty(k)) {
self[k] = o[k];
}
}
}
return self;
};
Dygraph.Export.asCanvas = function (dygraph, userOptions) {
"use strict";
var options = {},
canvas = document.createElement('canvas');
Dygraph.Export.hack_update(options, Dygraph.Export.DEFAULT_ATTRS);
Dygraph.Export.hack_update(options, userOptions);
canvas.width = dygraph.width_;
canvas.height = dygraph.height_ + options.legendHeight;
Dygraph.Export.drawPlot(canvas, dygraph, options);
Dygraph.Export.drawLegend(canvas, dygraph, options);
return canvas;
};
那“有效”。我说“工作”与引号,因为它仍然有问题,如正确打印轴标签,它不适用于HiDPI显示器,但它至少不会崩溃。