轨道&x2B;charts.js:如何使用数据库中的值填充Javascript数组?
我想使用Google可视化图表将信息显示到图形中 用于在图形中设置值的javascript函数如下所示:轨道&x2B;charts.js:如何使用数据库中的值填充Javascript数组?,javascript,jquery,ruby-on-rails,ruby,charts,Javascript,Jquery,Ruby On Rails,Ruby,Charts,我想使用Google可视化图表将信息显示到图形中 用于在图形中设置值的javascript函数如下所示: function drawLineChart(chartType) { if(chartType == undefined) { chartType = 'data1'; } var data = { data1: [ ['Year', 'Sales', 'Expenses'], ['
function drawLineChart(chartType) {
if(chartType == undefined) {
chartType = 'data1';
}
var data = {
data1: [
['Year', 'Sales', 'Expenses'],
['2004', 1000, 400],
['2005', 1170, 460],
['2006', 660, 1120],
['2007', 1030, 540]
]
};
...
}
我的问题是,我不知道如何用数据库中的值填充这样的数组-有什么提示吗
非常感谢您需要在erb中嵌入javascript。如果将文件命名为
chart.js.erb
,则可以通过erb从javascript访问Model
逻辑。这种方法的缺点是javascript必须在每个页面视图上编译,而不是静态编译。这会减慢页面加载时间,如果这是一个流量很大的页面,则应寻求其他路径
范例
chart.js.erb
function drawLineChart(chartType) {
if(chartType == undefined) {
chartType = 'data1';
}
var data = {
data1: [
<%= Model.all.map { |m| [m.year, m.sales, m.expenses] }.unshift(['Year', 'Sales', 'Expenses']) %>
]
};
...
}
函数绘图线条图(chartType){
如果(chartType==未定义){
chartType='data1';
}
风险值数据={
数据1:[
]
};
...
}
或者,您可以创建一个AJAX请求,通过API控制器在页面加载时填充数组。此方法允许静态编译资产,但有点复杂。这是我4个月前在项目中所做的。请密切关注代码。如果您使用的是RubyonRails,您可以通过键入以下命令从控制器获取数据
load(“可视化”、“1”、{packages:[“corechart”]});
setOnLoadCallback(drawChart1);
setOnLoadCallback(drawChart2);
函数drawChart1(){
var data=google.visualization.arrayToDataTable([
[‘工作’,],
[Eat',],
[‘通勤’,],
[看电视],],
[‘睡眠’,]
]);
变量选项={
标题:“我的日常活动”,
图表区:{左:5,上:20,宽:“100%”,高:“100%”,
身高:500,
宽度:500,
is3D:对
};
var chart=new google.visualization.PieChart(document.getElementById('PieChart\u 3d1');
图表绘制(数据、选项);
}
函数drawChart2(){
var data=google.visualization.arrayToDataTable([
[‘工作’,],
[Eat',],
[‘通勤’,],
[看电视],],
[‘睡眠’,]
]);
变量选项={
标题:“我的日常活动”,
图表区:{左:5,上:20,宽:“100%”,高:“100%”,
身高:500,
宽度:500,
is3D:对
};
var chart=new google.visualization.PieChart(document.getElementById('PieChart_3d2');
图表绘制(数据、选项);
}
$(文档).ready(函数(){
$(“#打开对话框”)。单击(函数(){
$('#dialog').css('溢出','隐藏')
$(“#dialog”).dialog({modal:true,
身高:450,
宽度:850,
可调整大小:true
});
});
});
您可以使用“数据”属性:
# statistics.js.coffee
jQuery ->
data = {
labels : $("#orders_chart").data('dates'),
datasets : [
{
fillColor : "rgba(220,220,220,0.5)",
strokeColor : "rgba(220,220,220,1)",
pointColor : "rgba(220,220,220,1)",
pointStrokeColor : "#fff",
data : $("#orders_chart").data('orders')
}
]
}
ordersChart = new Chart($("#orders_chart").get(0).getContext("2d")).Line(data)
#statistics/index.html.erb
<%= content_tag 'canvas', '', id: 'orders_chart', width: '1000', height: '600', data: {orders: (Order.week_ago.map &:total), dates: (Order.week_ago.map &:created_at)} %>
#statistics.js.coffee
jQuery->
数据={
标签:$(“#订单#图表”).数据(‘日期’),
数据集:[
{
填充颜色:“rgba(220220,0.5)”,
strokeColor:“rgba(2201)”,
点颜色:“rgba(220220,1)”,
pointStrokeColor:“fff”,
数据:$(“#订单#图表”)。数据(‘订单’)
}
]
}
ordershart=新图表($(“#订单"图表”).get(0.getContext(“2d”).Line(数据)
#统计数据/index.html.erb
# statistics.js.coffee
jQuery ->
data = {
labels : $("#orders_chart").data('dates'),
datasets : [
{
fillColor : "rgba(220,220,220,0.5)",
strokeColor : "rgba(220,220,220,1)",
pointColor : "rgba(220,220,220,1)",
pointStrokeColor : "#fff",
data : $("#orders_chart").data('orders')
}
]
}
ordersChart = new Chart($("#orders_chart").get(0).getContext("2d")).Line(data)
#statistics/index.html.erb
<%= content_tag 'canvas', '', id: 'orders_chart', width: '1000', height: '600', data: {orders: (Order.week_ago.map &:total), dates: (Order.week_ago.map &:created_at)} %>