1

我正在用 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);

}

4

2 回答 2

2

您缺少的是 Ruby 以 Unix 格式输出时间戳(即自 epoch 以来的秒数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;
}
于 2012-05-01T15:23:58.883 回答
0

好,我知道了....

红宝石代码:

    @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);
});
于 2012-05-01T19:01:08.723 回答