私は一般的には、それを修正しないでくださいが、この問題(私はこの問題への私の現在の解決策が壊れていない場合は、実際には醜いようです)。 Ruby、Sinatra、Haml、およびHighchartsを使用しています。Rubyでデータを取得してHighchartsに送信したいと考えています。Ruby/Sinatraを使ってHighchartsにデータを渡す方が良いでしょうか?
現在、私は本質的にはHighchartsのJavaScript全体から文字列オブジェクトを作成し、その中にルビデータを補間しています。これは機能しますが、私はこれとはまったく異なるアプローチをとるべきですか?
Rubyで変更できるいくつかのプロパティ(チャートのタイトル、データなど)を持つHighChartクラスを定義しました。 (!働く)以下の例は、デフォルトとして残りの部分を残して、これらのプロパティのうちの2つを設定します。
get '/' do
@chart = HighChart.new(options={
:title_text => "Test Title",
:series_data =>
{
'Calvin' => [10, 2, 17],
'Hobbes' => [11, 14, 6]
}
}
)
haml :index
end
私はビューのHAMLのJavaScriptフィルタ使用しています。これまでのところは良い
:javascript
#{@chart.chart_js}
を。醜い部分はchart_jsメソッドです。私は単純に、HighChartのジャバスクリプトのフルテキストをコピーし、それを文字列としてで貼り付け、その後、コントローラで作成されたHighChartオブジェクトから変数をつかむためにRubyの補間を使用している:それは便利です
def chart_js
chart_js = "
var chart1;
$(document).ready(function() {
chart1 = new Highcharts.Chart({
chart: {
renderTo: '#{render_to}',
type: '#{chart_type}'
},
title: {
text: '#{title_text}'
},
xAxis: {
categories: #{x_categories}
},
yAxis: {
title: {
text: '#{y_categories}'
}
},
series: [#{get_data_js(series_data)}]
});
});
"
end
そして、念のために、ここでHighChartのオブジェクトクラス定義の最初の部分です:
class HighChart
attr_accessor :render_to, :chart_type, :title_text, :x_categories,
:y_categories, :series_data
def initialize(options={})
self.render_to = options[:render_to] || 'container'
self.chart_type = options[:chart_type] || 'bar'
self.title_text = options[:title_text] || 'Fruit Consumption'
self.x_categories = options[:x_categories] || ['Apples', 'Bananas', 'Oranges']
self.y_categories = options[:y_categories] || 'Fruit eaten'
self.series_data = options[:series_data] || {'Jane' => [1, 0, 4],
'Bobbert' => [5, 7, 3],
'Zach' => [10, 2, 1]
}
end
ヒントをありがとう!私は私を悩ましていた部分は、文字列とコントローラーのすべてのjavascriptを持っていたので、私はあなたの助言を取り、それを部分的に分けました。それは文字列内のすべてのjavascriptを持つという問題を解決します。これでもっと快適になりました - 助けてくれてありがとう! – smerd11