2015-03-05 2 views
4

Я пробовал множество методов и следил за руководством Ryan Bates', но независимо от того, что я делаю, я до сих пор не определился.Rails 4: Передача переменных на javascript

application.html.erb

<body> 
<%= content_tag :div, id: 'trackers', data: {trackers: User.count} do %> 
<% end %> 
</body 

application.js.erb

var datadump = ($('#trackers').data('trackers')) 
console.log(datadump) 
//returns undefined in console 

Просмотр исходной страницы можно увидеть переменную

<div data-trackers="2" id="trackers"> 

Я передаю User.count на данный момент просто для упрощения, но мне нужно будет передать @trackers_count, который создается в before_action в приложении n. Я должен быть в состоянии разобраться с этим, хотя однажды выясню проблему здесь. Какие-либо предложения?

UPDATE - Я упростил все переменные вплоть до трекеров, а не trackers_count, чтобы предотвратить любые ошибки из синтаксиса и обновленного кода здесь, чтобы отразить это.

ANSWER UPDATE - Я выбрал правильный ответ, потому что, если вы хотите передать любые переменные ASIDE FROM CURRENT_USER, эти методы отлично работали. Тем не менее, вы не можете получить доступ к чему-либо с current_user в JS, потому что он загружается перед окном, поэтому он не может знать, кто является current_user. Это настоящая боль, но я просто сделал это долгий путь и получил доступ к информации, которая мне нужна, передав json и запросы ajax.

+0

Try '$ ('# trackers_count') данные ('следопыты-Count')', дефис вместо подчеркивания, как. в HTML. – Santhosh

+0

@Santhosh, без изменений .. –

+0

Можете ли вы ссылаться на конкретные рельсы, о которых вы говорите? – patrick

ответ

3

Я имел обыкновение делать:

var my_var = <%= User.count %> 
console.log(my_var) 

Если это целое число, это работает просто отлично. Однако, если вы хотите передать объекты, а затем использовать:

var my_var = JSON.parse(('<%= (@Users.count) == 0 ? "[]" : Users.first(10).to_json %>') 

console.log(JSON.stringify(my_var)) 
+0

Так как я пытаюсь вытащить трекеры, которые в контроллере @trackers = current_user.trackers.where (просматриваются: false) .count и есть основанный на текущем пользователе, как бы вы это потянули? Оба этих метода выше работают для User.count, но я не вижу, как реализовать его для метода контроллера. –

+0

У меня нет вашего вопроса, но он может отлично работать для переменной контроллера, например my_var = <% = @, y_controller_var%>.Если переменная контроллера меняет состояние (я имею в виду подсчет или любое другое свойство переменной), вам необходимо запустить ajax-запрос на каком-либо событии или через каждые n секунд спросить у сервера hey dude, что такое обновленная версия переменной. Обратите внимание, что рельсы отображают представление (вместе с js) и забывают все. – Guru

+0

Вы не можете использовать метод контроллера вместо User.count. Вам нужно собрать его в переменной экземпляра, и вы можете использовать эту переменную здесь. Позвольте мне знать, что именно вы требуете. Там может быть более лучший способ сделать это. – Anuja

3

Вы забыли о документе готовы. Попробуйте:

$(function(){ 
    var datadump = ($('#trackers').data('trackers')); 
    console.log(datadump) 
}); 

Или для получения данных из Rails для использования JS Гон Gem https://github.com/gazay/gon

+0

У меня был документ, готовый в моем локальном коде. Кроме того, gon gem, похоже, сталкивается с теми же проблемами, когда current_user не может быть передан. Я тоже это пробовал. –

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