I have a chart page with 12 charts on it. Each chart is in a self
contained partial. Each chart is a different group of data however the
common filter is a date range which I pass into the partial.
I implemented a jQRangeSlider to select the date range and pass that to
the controller which in turn re-renders the page.
I can't seem to get the charts to refresh showing the new data. I can
see in the terminal window the queries being called and they have the
right date however the chart is not refreshing.
HELP !!!
John
Part of the Controller
-------------------
class ChartsController < ApplicationController
def charts
if params.has_key?(:startdate)
@startdate = params[:startdate]
@enddate = params[:enddate]
end
@displaystartdate = @startdate.to_date.strftime("%m/%d/%Y")
@displayenddate = @enddate.to_date.strftime("%m/%d/%Y")
respond_to do |format|
format.html
format.js
end
end
end
Primary Chart View
----------------------
<br />
<div id="slider"></div>
<br />
<script>
function pad2(number) {
return (number < 10 ? '0' : '') + number
};
function datachanged(displaystart,displayend) {
$("#date_display h2").text('Dates from '+displaystart+' to
'+displayend);
};
$("#slider").dateRangeSlider({
arrows: false,
bounds:{
min: <%= first_training_jq %>,
max: <%= last_training_jq %>
},
defaultValues:{
min: <%= date_to_jq_date(@startdate) %>,
max: <%= date_to_jq_date(@enddate) %>
},
});
$("#slider").bind("userValuesChanged", function(e, data){
var startdate = data.values.min;
var enddate = data.values.max;
var displaystart =
pad2(startdate.getMonth()+1)+'/'+pad2(startdate.getDate())+'/'+startdate.getFullYear();
var displayend =
pad2(enddate.getMonth()+1)+'/'+pad2(enddate.getDate())+'/'+enddate.getFullYear();;
var
newstartdate=startdate.getFullYear()+'-'+pad2(startdate.getMonth()+1)+'-'+pad2(startdate.getDate());
var
newenddate=enddate.getFullYear()+'-'+pad2(enddate.getMonth()+1)+'-'+pad2(enddate.getDate());
$("#date_display h2").text('Dates from '+displaystart+' to
'+displayend);
$.ajax({
url: "/charts",
type: 'POST',
data: { startdate: newstartdate, enddate : newenddate},
cache: false,
dataType: 'json'
});
});
</script>
<div class="navigation">
<table>
<tr>
<td><%= link_to 'Back to Main Menu', :controller => 'home',
:action => 'menu' %></td>
</tr>
</table>
<br>
</div>
<div id="date_display" align="center"><h2>Dates from <%=
@displaystartdate %> to <%= @displayenddate %></h2></div>
<div id="chart_list" align="center"><table>
<tr>
<td>
<%= render partial: 'chart8', :locals => {:startdate =>
@startdate, :enddate => @enddate} %>
</td>
</tr>
</div>
And finally _chart8 partial
-----------------------
<script type="text/javascript" charset="utf-8">
$(function() {
new Highcharts.Chart({
chart: {
defaultSeriesType: "column",
type: "column",
renderTo: "charts8"
},
title: {
text: "Test/Test"
},
xAxis: {
type: 'category',
labels: {
rotation: -45,
style: {
fontSize: '13px',
fontFamily: 'Verdana, sans-serif'
}
}
},
yAxis: {
title: {
text: "Counts"
}
},
tooltip: {
pointFormat: '<tr><td
style="color:{series.color};padding:0">{
series.name}: </td>' +
'<td style="padding:0"><b>{point.y}</b></td></tr>',
},
legend: {
enabled: false
},
series: [{
name: "Counts",
data: <%= raw test_count_by_initiative(startdate, enddate)
%>
}],
dataLabels: {
enabled: true,
rotation: -90,
color: '#FFFFFF',
align: 'right',
format: '{point.y:.1f}', // one decimal
y: 10, // 10 pixels down from the top
style: {
fontSize: '13px',
fontFamily: 'Verdana, sans-serif'
}
}
});
});
</script>
<div id="charts8"></div>
--
Posted via
http://www.ruby-forum.com/.