Rails 4:传递变量给javascript

Rails 4: Passing variables to javascript

我尝试了很多方法并遵循了 Ryan Bates' 指南,但无论我做什么,我仍然无法定义。

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 中实例化。一旦我弄清楚这里的问题,我应该能够解决这个问题。有什么建议吗?

UPDATE - 我已将所有变量简化为跟踪器,而不是 trackers_count 以防止语法错误,并更新代码以反映这一点。

ANSWER UPDATE - 我选择了正确的答案,因为如果你想传递任何变量 ASIDE FROM CURRENT_USER 这些方法非常有效。但是,你不能在 JS 中使用 current_user 访问任何内容,因为它在 window 之前加载,所以它不知道 current_user 是谁。这真的很痛苦,但我只是做了很长时间,并通过传入 json 和 ajax 请求访问了我需要的信息。

我曾经做过:

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))

您忘记准备好文档了。尝试:

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

或者从 Rails 向 JS 提供数据使用 Gon gem https://github.com/gazay/gon

从 google 偶然发现这里。在我的例子中,我试图将对象数组传递给 js.erb,这会触发前端组件侦听的事件。对于来自 google 的任何人,我通过执行以下操作解决了这个问题:

在我的 controller.rb:

@payload = []

array.each do |a|
  temp = {
    foo: a.id,
    bar: a.relation.relation
  }
  @payload << temp
end

在我的 js.erb:

$(document).trigger('event', { data: <%= @payload.to_json.html_safe %> })

在我的 component.js:

$(document).on('event', (e, data) => {
  console.log(data) //should be array of objects in proper format
})

希望这对某人有所帮助!

This 可以帮到你。

对我来说,我想转这个数组

  @dates = ["2018-12-24", "2018-12-25", "2018-12-26", "2018-12-27", "2018-12-28"]

进入Javascript中的一个变量。我尝试了基本的:

var dates = <%= @dates.join(", ") %>
alert(my_var)

这提醒了这个确切的文本:

1995

我不知道为什么。

因为它不起作用,所以我通过复制和粘贴尝试了 Guru 的解决方案,但更糟糕的是现在我的代码中出现错误。最后我得到了 Guru 的解决方案:

(打印嵌入 ruby 打开和关闭在 JSON.parse() 之外工作并且缺少“)”)

  var dates = <%= JSON.parse(@dates.join(", ").to_json)%>
  alert(dates)

但即使它没有崩溃,想猜猜它发出了什么警告吗?

是的,你猜对了:

1995

所以我放弃了,我使用了一个变通方法:

在我看来edit.html.erb

<div class="dates"><%= @dates.join(", ") %></div>
<script>
  var dates = $(".dates").text()
  alert(dates)
  $(".datepicker").val(dates)
</script>

这让我可以输入变量,因此提醒正确的数据并使用正确的信息设置 Datepicker 的输入。我仍然为无法解决 hole 1995 问题而烦恼。如果有人能好心解释一下,我将不胜感激。希望这会有所帮助,祝你有美好的一天!