2014-11-23 5 views
0

У меня есть мой сервер экспорта и работает, чтобы сгенерировать все диаграммы на сервере. Один из вопросов, который у меня есть, - с datalabels. Если я использую формат, он работает нормально, но мне нужен форматтер, и он, похоже, не называется. Это соответствующая часть моих вариантов:Highcharts datalabel formatter для сервера экспорта

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. То, что я делаю, - это получение данных из другой службы, а затем сборка вторжения, как на клиенте. Проблемы, с которыми я столкнулся, заключаются в следующем: 1. выполнение JSON.stringify на infile избавляет от функций форматирования. 2. Если я создаю функциональные строки, которые не работают либо потому, что я должен вызвать веб-сервис для phartomjs highcharts. Это означает, что конфигурация автоматически преобразуется в JSON, а когда конвертер выполняет JSON.parse, функции остаются строками. Не уверен, что мне нужно изменить highcharts-convert.js, чтобы каким-то образом вернуть их обратно в функции, но не могу понять, как и не уверен, как отлаживать этот файл, поскольку он находится на отдельном процессе (дочерний процесс phantomjs). Пробовал почти все, что я могу придумать, чтобы исправить это, но пока не повезло.

ТАКЖЕ: Поскольку функция является строкой Highcharts бросает эту ошибку: TypeError: «не определено» не является функцией (оценка «axis.labelFormatter.call»)

+0

Использование сервера экспорта Highcharts, он работает: HTTP: //jsfiddle.net/0gt60Lrx/1/, можете ли вы создать воспроизводимый пример? – Mark

ответ

0

Я нашел решение, хотя не уверен, что если это лучший. Я вызываю json.stringify и затем переопределяю его. Затем я превращаю функцию в строку, чтобы при ее отправке в почтовом вызове она не удалялась. Затем в highcharts-convert.js я верну его обратно в функцию.

Извините, что так долго, чтобы вернуться. Некоторое время, но я верю, что это все. Для stringify я это сделал:

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? У той же проблемы, но не могу найти решение ... –

+0

Я тот же. Есть ли шанс поделиться этим изменением с Джейсоном? – dreza

+0

извините за то, что не отвечал раньше. Это было давно, но я думаю, что это все. Я делаю это в методе createChart для преобразования highcharts перед вызовом page.open: – Jason