2017-01-26 5 views
1

У меня есть диаграмма, которая имеет несколько строк, каждая из которых нанесена на ее собственную ось y.Сообщите, если линия скрыта

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

Моя проблема заключается в определении того, скрыта ли строка или нет. Свойство dataset.hidden представляется только релевантным, если скрытое значение в dataset._meta не определено. Я пытался создать код с этим в виду:

ctx.onclick = function(){ 
    var changed = false; 
    for(var j = 0;j < scatterChart.options.scales.yAxes.length;j++){ 
     var oldVal = scatterChart.options.scales.yAxes[j].display; 
     var hidden = false; 
     var isHiddenDataSet = scatterChart.data.datasets[j].hidden; 

     if(isHiddenDataSet){ 
      hidden = true; 
     } 

     var isHiddenMeta = scatterChart.data.datasets[j]._meta[0].hidden; 
     if(isHiddenMeta != null){ 
      hidden = isHiddenMeta; 
     } 

     scatterChart.options.scales.yAxes[j].display = !hidden; 
     changed = changed || oldVal == scatterChart.options.scales.yAxes[j].display; 
    } 
    if(changed){ 
     scatterChart.update(); 
    } 
} 

Этот код работал для моего оригинального теста, что есть только один график, но терпит неудачу, если есть более чем один график на странице в качестве индекса объекта данных в _meta Изменения от графика до графика.

Есть ли способ определить, скрыт ли набор данных?

+1

'_meta' не работает, ожидая при работе с более чем одной диаграммой. Не могли бы вы попробовать заменить '_meta [0]' на '_meta [Object.keys (scatterChart.data.datasets [j] ._ meta) [0]]'? – tektiv

+0

@tektiv Это выполняет свою работу. Я подумал, что есть какой-то рефлексивный ответ, но не был уверен, как это сделать. – Fr33dan

ответ

1

Поскольку он работает для вас, я устанавливаю его в качестве ответа

_meta свойства в ваших наборах данных является очень полезным, особенно при поиске конкретных свойств, таких как hidden.
Однако с ним трудно справиться, когда на одной странице несколько диаграмм.

При выполнении следующих действий:

var isHiddenMeta = scatterChart.data.datasets[j]._meta[0].hidden; 

Индекс 0 на самом деле первый график называется в программном коде (индекс 1 является второй, и т.д ..)
Таким образом, вы будете получать информацию первого графика, а не тот, на который вы только что нажали.


Чтобы это исправить, необходимо использовать Object.keys() метод, связанный с информацией набора данных следующим образом:

var isHiddenMeta = scatterChart.data.datasets[j]._meta[Object.keys(scatterChart.data.datasets[j]._meta)[0]].hidden; 

Это поможет вам hidden свойства набора данных реального графика.

 Смежные вопросы

  • Нет связанных вопросов^_^