2015-06-14 3 views
0

Я хочу передать переменные из контроллера в файл js. Вот что я делаю:Передача переменных в JS из контроллера Rails 4

#index.html.erb 
 
    <%= content_tag 'div', id: 'coords', data: { coords: @coords} do %> 
 
    <% end %> 
 

 
#@coords is defined in maps#index 
 
#@coords = Map.all

В консоли браузера я мог бы легко назвать:

$('#coords').data('coords') 
 
# or to acces 1st object 
 
$('#coords').data('coords')[0] 
 
# or to acces its attribute 
 
$('#coords').data('coords')[0].lat 
 
#Object {id: 1, vibration_level: 456, lat: "71.45543", lon: "53.43424", time_sent: "1994-05-20T00:00:00.000Z"…}
Но я не могу сделать то же самое в моей JavaScript. Я получаю undefined во всех этих вызовах. Но если я проверю свой код, я могу найти свой div с данными-координатами: Как сделать мои @coords доступными в js?

+0

Можете ли вы обновить воп вывод кода вида ? –

ответ

-1

, если вы расслоение плотной файл расположен следующим образом: app/assets/javascripts/your-js.js.erb

, то вы можете использовать переменные, как так:

<%= @coords %>

EDIT:

мой предыдущий ответ был неправильно петь js предварительно скомпилированы. так что мой новый ответ: создать HTML app/views/layouts/_page_scope.html.erb

<% 
    globalPageScope = {} 
    globalPageScope['coords'] = @coords if @coords 
%> 

<script type="text/javascript"> 
    document.globalPageScope = <%= raw globalPageScope.to_json %>; 
</script> 

, то вы можете получить доступ к этой переменной из JS:

globalPageScope.coords

+0

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

+0

@MichalSzyndel, как это так? вы могли бы предложить лучший? – WebQube

+0

Активы предварительно скомпилированы с использованием рейк-задачи, поэтому я понятия не имею, как вы ожидаете, что * контроллер * сможет передавать значение там в зависимости от запроса. –

Смежные вопросы