我的导出服务器正在运行并运行服务器上生成所有图表。我遇到的一个问题是数据标签。如果我使用格式它工作正常但我需要格式化程序,它似乎没有被调用。这是我选择的相关部分:
dataLabels: {
enabled: true,
color: '#606060',
align: 'right',
//format:'{point.y:.0f}',
formatter:function(){
var val = this.y;
return val / 1000000 + 'M';
},
由于该值正常显示,因此似乎不会调用此函数。当我在客户端使用这些确切的选项时它工作正常。这不可能吗?
更新: 我有自己的导出服务器(highcharts-converter.js),因为我在服务器上用phantomjs做这一切。我所做的是从另一个服务获取数据,然后像在客户端上那样构建infile。我遇到的问题是1.在infile上做JSON.stringify摆脱格式化程序函数。 2.如果我使函数字符串不起作用,因为我必须为highcharts phantomjs调用web服务。这意味着配置自动转换为JSON,当转换器执行JSON.parse时,函数仍然是字符串。不确定我是否需要更改highcharts-convert.js以某种方式将它们转回功能但无法弄清楚如何调试该文件,因为它是在一个单独的进程(phantomjs子进程)上。我已经尝试了几乎所有我想到的东西来解决这个问题,但到目前为止还没有运气。
ALSO: 因为函数是一个字符串highcharts抛出此错误: TypeError:'undefined'不是函数(评估'axis.labelFormatter.call')
答案 0 :(得分:0)
我找到了一个解决方案,但不确定它是否是最好的解决方案。我调用json.stringify然后覆盖它。然后我将函数转换为字符串,以便在post调用中发送它时不会被删除。然后在highcharts-convert.js中我把它变回一个函数。
抱歉花了这么长时间才回来。已经有一段时间,但我相信这就是它。为了字符串化我做了这个:function toJSONWithFuncs(obj) {
Object.prototype.toJSON = function() {
var sobj = {}, i;
for (i in this)
if (this.hasOwnProperty(i))
sobj[i] = typeof this[i] == 'function' ?
this[i].toString() : this[i];
return sobj;
};
var str = JSON.stringify(obj);
delete Object.prototype.toJSON;
return str;
}
然后在highcharts-convert.createChart中我在page.open之前执行此操作
input = params.infile;
input = input.replace(/:"function/g,':function');
input = input.replace(/(}\|")/g,'}');