用于导出服务器的Highcharts数据标签格式化程序

时间:2014-11-23 10:33:19

标签: highcharts highstock

我的导出服务器正在运行并运行服务器上生成所有图表。我遇到的一个问题是数据标签。如果我使用格式它工作正常但我需要格式化程序,它似乎没有被调用。这是我选择的相关部分:

 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')

1 个答案:

答案 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,'}');