Кажется, есть несколько проблем, связанных с использованием селекторов jQuery в вашем коде;это несколько сбивает с толку в тех разделах, где вы вызываете $(element)
, $(element)[0]
и т. д. В целом, я бы здесь не использовал jQuery, обновление работает, заменяя оба:
add('LineChart', '#mileage')
наadd('LineChart', 'mileage')
$(element)[0]
с document.getElementById(element)
Несколько общих советов здесь:
- Вам не нужно очищать div раньшеповторная визуализация диаграммы (т. е. нет необходимости вызывать
this.element.html('')
, достаточно просто передать новую таблицу данных и повторно вызвать .draw(newDataTable, opts)
. Хотя это потенциально выходит за рамки потребностей этого поста, новая функция анимации gviz является хорошим примером этого (вы просто вызываете перерисовку с обновленными данными, и график анимирует изменение). Очевидно, я не осознаю полной необходимости вашей реализации, но яЯ чувствую, что ваш код может быть немного более сложным, чем вам нужно. В зависимости от того, как вы можете получать данные, отправленные с вашего сервера, вы можете довольно легко перезагрузить диаграмму. Я дал некоторые детали в этом вопросе , новкратце это выглядит так:
function drawMyChart(dataTable) {
// convert your dataTable to the right format
// options here include loading from arrays, json representations of your datatable
// or something more manual perhaps
var opts = {height:50, width:50};
var chart = new google.visualization.LineChart(document.getElementById('vis'));
chart.draw(dataTable, opts);
}
function makeAjaxCall() {
$.ajax({
url: '/path/to/data/json',
sucess: drawMyChart(a),
dataType: 'json' // this is important, have it interpreted as json
});
}
// html somewhere
<div id='vis'></div>
<input type='button' onclick='makeAjaxCall()'>Go</input>
Надеюсь, это поможет.