2014-11-23 77 views
0

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

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抛出这个错误: 类型错误:“未定义”不是(评估“axis.labelFormatter.call”)

+0

这一权利使用Highcharts出口服务器,它的工作原理是:http: //jsfiddle.net/0gt60Lrx/1/,你能创建一个可重复的例子吗? – Mark 2014-11-23 15:29:41

回答

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,'}'); 
+0

你在哪里把它变回higcharts-convert.js文件中的函数?有同样的问题,但无法找到解决方案... – 2015-03-18 14:12:26

+0

我是一样的。有没有可能与Jason分享你所做的改变? – dreza 2015-11-16 23:13:56

+0

抱歉没有及时回复。这已经很长一段时间了,但我认为这是它。我在调用page.open之前在highcharts-convert的createChart方法中执行此操作: – Jason 2016-04-08 21:10:17

相关问题