首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Rails 4:将变量传递给javascript

Rails 4:将变量传递给javascript
EN

Stack Overflow用户
提问于 2015-03-05 13:20:14
回答 4查看 23.4K关注 0票数 9

我尝试了许多方法,并遵循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,以防止任何语法错误,并在此处更新代码以反映这一点。

答案更新-我选择了正确的答案,因为如果您想传递CURRENT_USER之外的任何变量,这些方法都工作得很好。但是,您不能在JS中使用current_user访问任何内容,因为它在窗口之前加载,因此它无法知道current_user是谁。这真的很痛苦,但我只是走了很长一段路,通过传入json和一个ajax请求来访问我需要的信息。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-03-05 13:44:18

我以前经常这样做:

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))
票数 11
EN

Stack Overflow用户

发布于 2015-03-05 19:55:55

您忘记了文档就绪。尝试:

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

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

票数 3
EN

Stack Overflow用户

发布于 2018-05-03 21:53:29

从谷歌跌跌撞撞地来到这里。在我的例子中,我试图将一个对象数组传递给一个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
})

希望这对某些人有帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28870567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档