Графики линейных рядов выдают ошибку при изменении размера — highcharts

#php #jquery #highcharts

#php #jquery #highcharts

Вопрос:

Я использовал highcharts однострочный график серии. Кажется, все работает нормально, но когда я изменяю размер страницы (просто чтобы проверить отзывчивость или просто на мобильном устройстве). Значения исчезают. Я вижу ошибку в журналах консоли.

введите описание изображения здесь

Вот как я генерирую диаграмму

 Highcharts.stockChart('nav-chart', {

 tooltip: {
        pointFormat:"{point.y:.3f}u20ac"
  },
  chart: {
    type: 'line',
    zoomType: 'x',
    pinchType: 'x',
    panning: false,
    <?php if (is_front_page()){ ?>
    height: 700,
    <?php } else { ?> 
    height: 500, 
    events: {
      load: updateLegendLabel 
    }    
    <?php } ?> 
  },
  

updateLegendLabel имеет некоторые вычисления, которые генерируют метки.

  var chrt = !this.chart ? this : this.chart;
  chrt.update({
    legend: {
      useHTML: true,
      symbolPadding: 0,
      symbolWidth: 0,
      symbolHeight: 0,
      symbolRadius: 0,    
      labelFormatter: function() {


        var lastVal = this.yData[this.yData.length - 1],
          chart = this.chart,
          xAxis = this.xAxis,
          points = this.points,
          avg = 0,
          counter = 0,
          min, max;
... there is some business logic down there
  

points var становится нулевым при изменении размера страницы. Почему это так? Нужно ли мне повторно обновлять dataset или что?

Комментарии:

1. ваш набор данных должен находиться в некоторой глобальной переменной javascript, чтобы он также был доступен при перерисовке.

Ответ №1:

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

 <script>
//before graph area started
var dataA = '<?php echo $dataA;?>';
var dataB = '<?php echo $dataB;?>';
//graph logic started
// your graph code which can use above variables
// but the variable need to be available can be evaluated from your draw script.

</script>
  

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

Комментарии:

1. есть ли какой-либо способ отключить перерисовку, поскольку при изменении размера требуется не перерисовка

2. я не буду предлагать вам отключать перерисовку, потому что перерисовка требуется при каждом событии изменения размера окна, иначе это будет выглядеть очень странно. лучше присвоить некоторым переменным значения вашего php над скриптом, а затем использовать эти переменные. Поскольку при этом эти переменные данные будут доступны постоянно. Также код на стороне сервера всегда должен быть отдельным и имеет много преимуществ.