Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rails 4:向javascript传递变量_Javascript_Ruby On Rails_Variables_Ruby On Rails 4 - Fatal编程技术网

Rails 4:向javascript传递变量

Rails 4:向javascript传递变量,javascript,ruby-on-rails,variables,ruby-on-rails-4,Javascript,Ruby On Rails,Variables,Ruby On Rails 4,我尝试了许多方法,并遵循指南,但无论我做什么,我仍然没有得到定义 application.html.erb <body> <%= content_tag :div, id: 'trackers', data: {trackers: User.count} do %> <% end %> </body 查看页面源我可以看到变量 <div data-trackers="2" id="trackers"> 我现在传递User.count

我尝试了许多方法,并遵循指南,但无论我做什么,我仍然没有得到定义

application.html.erb

<body>
 <%= content_tag :div, id: 'trackers', data: {trackers: User.count} do %>
 <% end %>
</body
查看页面源我可以看到变量

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

我现在传递User.count只是为了保持简单,但我需要传递@trackers\u count,它在应用程序控制器的before\u操作中实例化。一旦我解决了这个问题,我应该能够解决这个问题。有什么建议吗

更新-我将所有变量简化为跟踪器,而不是跟踪器计数,以防止语法错误,并更新了此处的代码以反映这一点

答案更新-我选择了正确的答案,因为如果您想传递除当前用户之外的任何变量,这些方法非常有效。但是,您无法使用JS中的当前_用户访问任何内容,因为它在窗口之前加载,所以它无法知道当前_用户是谁。这是一个真正的痛苦,但我只是做了很长的路,通过传入json和ajax请求访问了我需要的信息

我过去常做:

var my_var = <%= User.count %>
console.log(my_var)
var my\u var=
console.log(我的变量)
如果它是一个整数,那么就可以了。 但是,如果要传递对象,请使用:

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

console.log(JSON.stringify(my_var))
var my_var=JSON.parse((“”)
log(JSON.stringify(my_var))

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

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

或者,为了从Rails向JS提供数据,使用Gon gem从google这里偶然发现。在我的例子中,我试图将一个对象数组传递给一个JS.erb,这触发了一个前端组件监听的事件。对于google的任何人,我通过以下操作解决了这个问题:

在my controller.rb中:

@payload = []

array.each do |a|
  temp = {
    foo: a.id,
    bar: a.relation.relation
  }
  @payload << temp
end
希望这有助于他人!

可以帮助您

对我来说,我想打开这个阵列

  @dates = ["2018-12-24", "2018-12-25", "2018-12-26", "2018-12-27", "2018-12-28"]
转换为Javascript中的变量。我尝试了以下基本方法:

var dates = <%= @dates.join(", ") %>
alert(my_var)
我不知道为什么

由于它不起作用,我通过复制和粘贴尝试了Guru的解决方案,但更糟糕的是,我的代码中出现了一个错误。最后我得到了Guru的解决方案,如下所示:

(打印嵌入的ruby open and close在JSON.parse()之外工作,并且缺少“)”)

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

在我的视图中edit.html.erb

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

变量日期=$(“.dates”).text()
警报(日期)
$(“.datepicker”).val(日期)

这使我能够输入变量,从而警告正确的数据,并使用正确的信息设置日期选择器的输入。我仍然因为不能解决这个问题而被窃听。如果有人能解释一下,我将不胜感激。希望这对你有帮助,祝你有一个美好的一天

试试
$(“#trackers_count”)。数据('trackers-count')
,用连字符代替下划线,就像在HTML中一样。@Santhosh,没有变化。。你能链接到你正在谈论的特定轨道类型吗?@patrick,我把它链接到顶部。在他开始谈论gon gem之前,你只需要走到4分钟左右就可以了。你能在内容标签块中放一些东西,比如“加载跟踪器…”吗?根据RailsCast获取,因为我正在尝试引入跟踪器,在控制器中,跟踪器是@trackers=current_user.trackers.where(查看:false)。计数并基于当前用户,您将如何引入?上面这两种方法都适用于User.count,但我不知道如何为controller方法实现它。我不明白你的问题,但它可以很好地适用于像my_var=这样的控制器变量。如果控制器变量正在更改状态(我指的是count或变量的任何其他属性),则需要在某个事件上或在每n秒后触发ajax请求,以询问服务器hey dude变量的更新版本是什么。请注意,rails呈现一个视图(以及js)并忘记所有内容。您不能在这里使用controller方法来代替User.count。您需要在实例变量中收集它,并且可以在此处使用该变量。让我知道你的具体要求是什么。可能有更好的方法可以做到这一点。我可能只需要发送一个get请求来提取数据。我只是尝试填充变量,因为我已经设置了一个get-request方法,需要做的就是第一次更新计数。之后,该方法的其余部分将自行处理。一定有办法把这些信息放进去。这应该不会这么困难,我已经用本地代码准备好了文档。此外,gon gem似乎也遇到了同样的问题,当前的_用户无法通过。我也试过了。
  @dates = ["2018-12-24", "2018-12-25", "2018-12-26", "2018-12-27", "2018-12-28"]
var dates = <%= @dates.join(", ") %>
alert(my_var)
1995
  var dates = <%= JSON.parse(@dates.join(", ").to_json)%>
  alert(dates)
1995
<div class="dates"><%= @dates.join(", ") %></div>
<script>
  var dates = $(".dates").text()
  alert(dates)
  $(".datepicker").val(dates)
</script>