Несколько экземпляров диаграммы визуализаций Google внутри отдельных разделов [Продолжение]
Это продолжение вопроса, который я уже задавал в Stackru. Поэтому, пожалуйста, убедитесь, что вы прочитали это, чтобы получить полную картину:
Несколько экземпляров диаграммы визуализаций Google внутри отдельных элементов Div
В попытке сделать все это динамичным, я написал следующий код:
var containers = document.getElementsByClassName('gaugeWrapper');
console.log(containers);
google.load('visualization', '1', { packages: ['gauge'] });
for(var i = 0; i < containers.length; i++) {
var id = containers[i].getAttribute('id');
var name = containers[i].getAttribute('data-name');
var value = containers[i].getAttribute('data-value');
google.setOnLoadCallback(function () { drawChart(id, name, value) });
}
function drawChart(id, name, value) {
console.log(id);
console.log(name);
console.log(value);
var data = google.visualization.arrayToDataTable([
['Label', 'Value'],
[name, value]
]);
var options = {
width: 400, height: 120,
redFrom: 90, redTo: 100,
yellowFrom: 75, yellowTo: 90,
minorTicks: 5
};
var chart = new google.visualization.Gauge(document.getElementById(id));
chart.draw(data, options);
}
Это не работает. Проблема в том, что консоль выводит данные только последнего div. Это означает, что функция вызывается 5 (containers.length
) раз с тем же набором параметров.
ОБНОВИТЬ:
Согласно ответу Ateszki, вот мой обновленный код:
google.load('visualization', '1', { packages: ['gauge'] });
google.setOnLoadCallback(drawChart);
function drawChart() {
var containers = document.getElementsByClassName('gaugeWrapper');
for (var i = 0; i < containers.length; i++) {
var id = containers[i].getAttribute('id');
var name = containers[i].getAttribute('data-name');
var value = containers[i].getAttribute('data-value');
var data = google.visualization.arrayToDataTable([
['Label', 'Value'],
[name, value]
]);
var options = {
width: 400, height: 120,
redFrom: 90, redTo: 100,
yellowFrom: 75, yellowTo: 90,
minorTicks: 5
};
var cont = document.getElementById(id);
console.log(cont);
var chart = new google.visualization.Gauge(cont);
chart.draw(data, options);
}
}
К сожалению, я все еще не мог заставить это работать, пока. Теперь на экране ничего не отображается, хотя мой console.log, кажется, выводит правильные вещи...
Любые объяснения / предложения?
2 ответа
Хорошо, следующее решило проблему:
google.load('visualization', '1', { packages: ['gauge'] });
google.setOnLoadCallback(drawChart);
function drawChart() {
var containers = $('.gaugeWrapper');
containers.each(function (index, elem) {
var id = $(elem).attr('id');
var name = $(elem).data('name');
var value = $(elem).data('value');
var data = google.visualization.arrayToDataTable([
['Label', 'Value'],
[name, value]
]);
var options = {
width: 400, height: 120,
redFrom: 90, redTo: 100,
yellowFrom: 75, yellowTo: 90,
minorTicks: 5
};
var cont = document.getElementById(id);
var chart = new google.visualization.Gauge(cont);
chart.draw(data, options);
});
Я не знаю, чем он отличается от кода в обновленном разделе вопроса, за исключением того факта, что сейчас я использую jQuery для получения значений, которые я ищу...
Функция, которую вы связываете при загрузке, перезаписывает предыдущую.
Возможно, вы можете сохранить значения в другом объекте и загрузить их все сразу в одну функцию.