Flot不会Plot(Ruby)

时间:2012-04-30 18:49:48

标签: ruby-on-rails ruby flot

我正在玩Ruby与FLOT,我很难将代码传递给javascript;我知道我的javascript没有正确地从Ruby读取数据。我需要一些语法帮助。

o={};
o= {'label' => "A", 'data' => @example.collect{|x| [Time.utc(x.date).to_i, x.num]}}
render :text => o.to_json

我已成功渲染输出:

{ “标签”: “A”, “数据”:[[1281225600,1.31],[1281225600,1.31],[1281225600,1.25]]}

HTML仅输出此数据。

我的javascript如下:

 var obj = jQuery.parseJSON(text);
    var options = {
    lines: { show: true },
    points: { show: true },
    xaxis: { mode: "time",  timeformat: "%m/%d/%y",   minTickSize: [1, "day"]}
    };  

       var data = obj;            
      $.plot(placeholder,[data],options);

}

2 个答案:

答案 0 :(得分:2)

你缺少的是Ruby以Unix格式发布时间戳(即自纪元1281225600以来)。 Flot需要javascript时间戳,它计算自纪元以来的毫秒,即1281225600*1000

所以在你的Ruby代码中,最好的办法是做这样的事情:

o={};
o= {'label' => "A", 'data' => @example.collect{|x| [Time.utc(x.date).to_i*1000, x.num]}}
render :text => o.to_json

或者,如果你愿意,你可以遍历obj.data并在Javascript端进行乘法运算:

for (i=0;i<obj.data.length;i++){
    obj.data[i] = obj.data[i]*1000;
}

答案 1 :(得分:0)

好的,我明白了......

Ruby代码:

    @o={};
    @o= {'label' => "A", 'data' => @example.collect{|x| [Time.utc(x.date).to_i, x.num]}}

Java代码:

$(function () {

var obj = <%= @o.to_json %>;
var options = {
   lines: { show: true },
   points: { show: true },
   xaxis: { mode: "time",  timeformat: "%m/%d/%y",   minTickSize: [1, "day"]}
};  

var data = obj;            
$.plot(placeholder,[data],options);
});