Сделать доступным объект из другой функции
Здравствуйте!
Задача тривиальна: необходимо построить график по полученным с сервера данным и менять цвет пера графика в зависимости от выбранного в <input type='color' class='color'>. По отдельности все это реализовано и работает: 1. Функция чтения данных с сервера и отрисовки графика: var get_series = function(from, to){ var url = $('#trend_url').attr('href').replace('edit', 'data'); var series_data = {}; $.ajax({ url: url, type: 'GET', dataType: "json", data: {'from': from, 'to': to}, success: function(reply) { var chart = new Highcharts.Chart({ chart: { renderTo: 'container', zoomType: 'xy' }, title: { text: 'Sensor Data', x: -20 //center }, subtitle: { text: 'some subtitle', x: -20 }, xAxis: { type: 'datetime', dateTimeLabelFormats: { month: '%e. %b', year: '%b' } }, yAxis: { title: { text: 'Temperature (°C)' }, plotLines: [{ value: 0, width: 1, color: '#808080' }] }, series: reply }); } }); }; 2. Функция изменения цвета графика: $('.color').change(function(){ // var chart = how to get chart object from function get_chart()? var color_name = $(this).attr('name'); var chart_number = parseInt(color_name.slice(5)) - 1; chart.series[chart_number].options.color = $(this).attr('value'); chart.series[chart_number].update(chart.series[chart_number].options); }); Задача состоит в том, чтобы функция №2 имела доступ к объекту 'chart' из функции №1. А проблема в том, что график рисуется только при такой реализации функции get_chart - когда поле series объекта chart непосредственно равно reply. Попытки вынести создание объекта chart в область document.ready() и возвращать только полученные данные в виде объекта series_obj, а потом подставить их при создании графика ни привели к нужному результату: графика не отображается: -Попытка переделать код: 1. Возвращаем только полученные данные в виде объекта: var get_series = function(from, to){ var url = $('#trend_url').attr('href').replace('edit', 'data'); var series_data = {}; $.ajax({ url: url, type: 'GET', dataType: "json", data: {'from': from, 'to': to}, success: function(reply) { series_data = reply } }); return series_data; }; 2. Запрашиваем данные: var series_obj = get_series(FromDateISOString, CurrentDateISOString); 3. Рисуем график: var chart = new Highcharts.Chart({ chart: { renderTo: 'container', zoomType: 'xy' }, title: { text: 'Sensor Data', x: -20 //center }, subtitle: { text: 'some subtitle', x: -20 }, xAxis: { type: 'datetime', dateTimeLabelFormats: { month: '%e. %b', year: '%b' } }, yAxis: { title: { text: 'Temperature (°C)' }, plotLines: [{ value: 0, width: 1, color: '#808080' }] }, series: series_obj }); |
Может потому что ответ от сервера ещё не приходит, а вы уже возвращаете series_data? Это же асинхронный запрос...
|
Часовой пояс GMT +3, время: 22:22. |