Вопрос по json, javascript, ruby-on-rails – Как передать массив Ruby в Javascript, чтобы сделать линейный график

7

Я пытаюсь создать веб-страницу для отображения линейных графиков в моем приложении Ruby on Rails 2.3.14. Я нашел инструмент под названием JS Charts, который позволяет мне создавать красивые графики с использованием Javascript, но у меня возникают проблемы с отправкой ему необходимых данных. Вот способ сделать статический линейный график:

<code><script type="text/javascript">
  var myData = new Array([1, 395], [2, 244], [3, 223], [4, 210], [5, 238], [6, 223], [7, 275], [8, 31]);
  var myChart = new JSChart('chartcontainer', 'line');
  myChart.setDataArray(myData);
  myChart.draw();
</script>
</code>

Я поместил этот код в stats.html.erb, и он появился. Однако мне нужно, чтобы он отображал данные линейного графика, которые я им предоставляю. В контроллере создается двухмерный массив:

<code>>> @a
=> [[1, 395], [2, 244], [3, 223], [4, 210], [5, 238], [6, 223], [7, 275], [8, 31]]
</code>

Я должен иметь возможность использовать эту переменную в представлении, и установитьvar myData к этому, с чем-то вроде:

<code>var myData = "<%= @a %>";
</code>

Я пробовал другие вещи, такие как:

<code>var myData = JSON.parse( "<%= @a.to_json %>" );
</code>

но ничего не работает. Что я могу сделать?

РЕДАКТИРОВАТЬ:

Возникла проблема с массивом, который контроллер передал в представление (@a), которое было пустым. Я был в состоянии использовать:

<code>var myData = JSON.parse( "<%= @a.to_json %>" );
</code>

чтобы отобразить линейный график с правильными данными, передаваемыми в представление.

@eric вставьте сгенерированный HTML-код страницы результатов. Abid
Хороший вопрос. Я не уверен, почему ваши примеры не работают, предполагая, что вы находитесь в файле .erb, и может работать интерполяция ruby. Может быть, попробуйте интерполировать в строку? IE<%= @.to_s %>, потому что javascript будет оценивать, что ruby добавляет в скрипт, как если бы вы его набрали ... Andrew
Подождите, как-то это сработало на этот раз. Я думаю, что была проблема с данными, которые контроллер передал в представление (@a). я использовалJSON.parse( "<%= @a.to_json %>" );, Я ценю ответы по крайней мере. Eric

Ваш Ответ

1   ответ
8

<%= javascript_tag do %>
  window.myData = <%=raw @a.to_json %>;
<% end %>

или в Rails 3 вы можете быть супер HTML5 подкованным и использоватьdata помощники, чтобы добавить ваши данные в качестве атрибута некоторого HTML-тега:

<%= content_tag "div", id: "myDiv", data: {stuff: @a} do %>
<!-- some html stuff...-->
<% end %>

и затем в тогда в JavaScript (с JQuery):

var myData = $('#myDiv').data("stuff")

и для супер увлеченных, проверьтеэтот Railscast

Похожие вопросы