Получить переменную из структуры данных в highstock - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь передать идентификатор в структуру данных, чтобы при событии щелчка я мог использовать его для открытия новой вкладки в браузере. Я ошибочно предположил, что могу использовать this.id так же, как я могу использовать this.color или this.name. Моя структура данных выглядит так:

var _DATA_XY0 =[{"id":24356,"name":"Title name","data":[[1322175600000,0.0],[1322780400000,8.301021537820063],[1323385200000,6.064466537188018],[1323990000000,2.580595528139673],[1324594800000,4.171990586412377],[1325199600000,3.0967211543766027],.......

У меня есть этот код для построения XY-диаграммы:

Highcharts.stockChart(div, {
    exporting: {
        enabled: false,
        allowHTML: true
    },
    rangeSelector: {
        enabled: false
    },
    navigator: {
        enabled: false
    },
    scrollbar: {
        enabled: false
    },

    yAxis: {
        opposite: false,
        labels: {
            formatter: function () {
                return (this.value > 0 ? ' + ' : '') + this.value + '%';
            }
        },
        plotLines: [{
            value: 0,
            width: 2,
            color: 'silver'
        }]
    },

    plotOptions: {

        series: {
            showInNavigator: true,
            point: {
                events: {
                    click: function (e) {
                        var win = window.open('https://localhost/' + this.id, '_blank');
                        if (win) {
                            win.focus();
                        }
                    }
                }
            }
        }

    },

    tooltip: {
        pointFormat: '<span style="color:{series.color}">{series.name}</span>: <b>{point.y}</b>',
        valueDecimals: 2,
        split: false
    },

    series: data
});

На событии клика я использую это:

var win = window.open('https://localhost/' + this.id, '_blank');

Но this.id, похоже, не работает. Я использую ту же логику с разбросом, и она работает.

спасибо

1 Ответ

0 голосов
/ 03 мая 2018

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

Я создаю следующий объект:

var graphEvents = {
  type: 'flags' , 
  data: new Array() , 
  onSeries: 'DataSet',
  events: {
    click : function(e){
      if(e.point.evt) {
        var myEvt = e.point.evt;
      }
    }
  }
};

Затем вставьте в массив данных объекта события следующее:

graphEvents.data.push({
    x: Date.parse(myDate),
    title: "EventTitle" , 
    evt : {
      custom_key_a : value["a"] , 
      custom_key_b : value["b"] , 
      custom_key_c : value["c"] , 
      custom_key_d : value["d"] 
    }
});

Обратите внимание на клавишу "evt". Это пользовательский ключ, который я добавляю к объекту, поэтому он доступен, когда пользователь нажимает на него вместе со всеми пользовательскими ключами: значениями, которые у меня есть внутри. Таким образом, когда пользователь нажимает на событие, я могу получить всю мета объектов из кода, показанного в первом объекте:

events: {
  click : function(e){
    if(e.point.evt) {
      var myEvt = e.point.evt;
    }
  }
}

А теперь в переменной myEvt у меня есть все и все, что мне нужно.

...