繁体   English   中英

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

更新 - 我已将所有变量简化为仅跟踪器,而不是trackers_count,以防止语法和更新代码中的任何错误反映出来。

答案更新 - 我选择了正确的答案,因为如果你想传递任何变量ASIDE FROM CURRENT_USER那些方法是完美的。 但是,您无法使用JS中的current_user访问任何内容,因为它在窗口之前加载,因此无法知道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

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

在我的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
})

希望这有助于某人!

可以帮到你。

对我来说,我想转动这个阵列

  @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的输入。 我仍然因为无法解决1995年的问题而受到抨击。 如果有人能够如此善意地解释,我会非常感激。 希望这会有所帮助并度过美好的一天!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM