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

私は出力をそのように正常にレンダリングしました:

{"label": "A"、 "data":[[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形式(つまり、エポックからの秒数1281225600)で出力することです。Flotには、エポックからのミリ秒1281225600*1000をカウントするjavascriptタイムスタンプが必要です。

したがって、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

はい、分かりました....

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);
});
于 2012-05-01T19:01:08.723 に答える