我正在玩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);
}
答案 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);
});