我尝试了许多方法,并遵循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请求来访问我需要的信息。
发布于 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))
发布于 2015-03-05 19:55:55
您忘记了文档就绪。尝试:
$(function(){
var datadump = ($('#trackers').data('trackers'));
console.log(datadump)
});
或者使用Gon gem https://github.com/gazay/gon从Rails向JS提供数据
发布于 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
})
希望这对某些人有帮助!
https://stackoverflow.com/questions/28870567
复制相似问题