Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
轨道&x2B;charts.js:如何使用数据库中的值填充Javascript数组?_Javascript_Jquery_Ruby On Rails_Ruby_Charts - Fatal编程技术网

轨道&x2B;charts.js:如何使用数据库中的值填充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'], ['

我想使用Google可视化图表将信息显示到图形中

用于在图形中设置值的javascript函数如下所示:

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)} %>