2013-05-22 5 views
1

Извините, если этот вопрос задан раньше, но я не смог найти аналогичный вопрос, связанный с моей проблемой.Duplicate Series в легенде при экспорте

Проблема, которую я испытываю, заключается в том, что при экспорте в PNG, JPG и т. Д. Серия удваивается. Так что, если у меня на экране есть четыре серии, графика, когда дело доходит до экспорта, в легенде будет восемь серий.

Я думаю, что проблема связана с событием «load» диаграммы, выполняемой в последующие моменты времени при экспорте.

$(function() { 

    Highcharts.setOptions({ 
     global: { 
      useUTC: false 
     } 
    }); 

    function fnFetchData(chart) { 
     // Just imagine an AJAX request has just been done to get a JSON response 
     // JSONData = $.getJSON('/FetchSales'); 
     var JSONData 
     JSONData = { 
      seriesName: 'Sales 2013', 
      data: [(Math.random() * 100) + 1, (Math.random() * 100) + 1, 
        (Math.random() * 100) + 1, (Math.random() * 100) + 1, 
        (Math.random() * 100) + 1, (Math.random() * 100) + 1, 
        (Math.random() * 100) + 1, (Math.random() * 100) + 1, 
        (Math.random() * 100) + 1, (Math.random() * 100) + 1, 
        (Math.random() * 100) + 1, (Math.random() * 100) + 1, 
        (Math.random() * 100) + 1] 
     }; 

     //alert('About to load the chart Data'); 

     chart.addSeries({ 
      name: JSONData.seriesName, 
      data: JSONData.data, 
      type: 'spline' 
     }, true); 
     chart.redraw(true); 
    }; 


    // Create the chart 
    $('#container').highcharts({ 
     chart: { 
      events: { 
       load: function() { 
        fnFetchData(this); 
       } 
      } 
     }, 
     title: { 
      text: 'Chart Data from load Event' 
     }, 
     exporting: { 
      enabled: true, 
      scale: 2, 
      filename: 'ChartWithDoubleupSeries' 
     }, 
     spline: { 
      animation: false 
     }, 
     series: [] 
    }); 

}); 

я могу воспроизвести проблему, вот пример:

http://jsfiddle.net/FtjJF/

Я продолжаю думать, что это может быть ошибка, что событие «нагрузка» в настоящее время выполняется при экспорте, если это не является стандартное поведение, и мне нужно включить и дополнительный вариант.

Версии детали:

  • Highstock JS v1.3.1 (2013-04-09)
  • Highstock JS v1.3.1 (2013-04-09) Экспорт модуль

ответ

0

Простой обходной путь является использование SetTimeout():

  load: function() { 
       var chart = this; 
       setTimeout(function() { 
        fnFetchData(chart); 
       }, 1); 
      } 

И для меня выглядит как ошибка, сообщает: https://github.com/highslide-software/highcharts.com/issues/1868 Спасибо!

+0

Спасибо за работу, вокруг решения. В настоящее время то, что сделано в качестве альтернативного решения, состояло в том, чтобы хранить имена серий в массиве. Когда событие загрузки запущено, я проверяю имя серии, чтобы узнать, существует ли она в массиве. Если это так, не вызывайте метод addSeries. После небольшого дополнительного исследования для долгосрочного решения я добавил options.chart.events = null; –

0

В качестве альтернативного решения было хранить имена серий в массиве. Когда событие загрузки запущено, я проверяю имя серии, чтобы узнать, существует ли она в массиве. Если это так, не вызывайте метод addSeries.

var AvailableSeries = []; 

$(chart.series).each(function(key,value){ 
    AvailableSeries.push(value.name); 
}); 


if ($.inArray('Sales 2013' ,AvailableSeries)==-1) { 
    chart.addSeries(name:'Sales 2013', data:[234,453,56732,435,4,45,32,232,43]}); 
}; 

После немного больше исследования для долгосрочного решения, я добавил эту строку «options.chart.events = NULL;» к скрипту exportpting.js.

Проблема с этим решением может быть законной причиной того, что события графика будут выполняться при экспорте графика. Я не могу думать об этом. Может быть там должна быть возможность подавить события при экспорте:

{ exporting:{ skipEvents:true } } 
+0

Когда я использую сервер экспорта highcharts напрямую, он не работает для меня. Я не могу установить, что события равны нулю, и я получаю дополнительную серию каждый раз и не могу избавиться от нее – Asped

0

Экспорт диаграммы через прагматично, как, сделать Null событие загрузки

var chart = $('#chart-container').highcharts(); 
chart.exportChart(
    {type: 'image/png', filename: 'name'}, 
    {chart: { events:null } }); 
Смежные вопросы