有没有办法将javascript变量传递给html.erb中的ruby方法

Ric*_*een 5 javascript ruby ruby-on-rails

我正在尝试将变量传递给方法.这是一个例子:

<script>
  var b = 1
  var c = "string" + "<%= method.a(b).to_s%>"
</script>
Run Code Online (Sandbox Code Playgroud)

这不起作用.

这有效:

<% @b = 1%>
<script>
  var c = "string" + "<%= method.a(@b).to_s%>"
</script>
Run Code Online (Sandbox Code Playgroud)

任何想法,将不胜感激.

Jef*_*D23 1

您无法在 Ruby 方法中计算 JavaScript 变量。此外,您当前的脚本必须位于资产管道之外,这通常是一个不好的做法。

一种简单的解决方案是将变量作为数据属性传递。您将运行您的方法,然后在 DOM 加载后使用 jQuery 传递结果。这允许您将 JavaScript 保留在资产管道中,并向其传递由 Ruby 服务器端评估的数据。

注意:@b应该在您的控制器上定义:

<div id="foo" data-bar="<%= method.a(@b).to_s %>"></div>

<script>
  $(document).ready(function() {
    var b = $(#foo).data('bar');
    var c = "string" + b;
  });
</script>
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用 Rails 中不显眼的 JavaScript异步渲染脚本。