有没有办法将javascript变量传递给html.erb中的ruby方法
我正在尝试将变量传递给方法。 这是一个例子:
var b = 1 var c = "string" + ""
这不起作用。
这有效:
var c = "string" + ""
任何想法,将不胜感激。
您无法在Ruby方法中评估JavaScript变量。 此外,您当前的脚本必须位于资产管道之外,这通常是一种不好的做法。
一个简单的解决方案是将变量作为数据属性传递。 您将运行您的方法,然后在加载DOM后使用jQuery传递结果。 这允许您将JavaScript保留在资产管道中并将其传递给Ruby服务器端评估的数据。
注意: @b
应该在您的控制器上定义:
另一个选择是使用 Rails中不显眼的JavaScript异步呈现脚本。
执行这项工作有一个很好的gem。 使用这个gem你可以这样做:
内控制器:
gon.push(variable_name: 1)
在你的js文件里面你可以检索这个变量:
gon.variable_name
它适用于:js或:咖啡文件。
Ruby代码在服务器上执行,而Javascript由客户端的浏览器执行。
标记为<%= %>
Ruby代码在服务器上执行, 然后传送到客户端,在该客户端将执行Javascript代码。 这就是为什么第一个片段不起作用而第二个片段不起作用的原因:在第二个片段中, <% @b = 1 %>
在将HTML发送给请求者之前进行评估。
有了这样说,有一种方法可以做你想要的: 使用Ajax将Javascript变量传递给服务器,执行你需要的任何东西并将回复发送给客户端。
您需要更好地描述您的流程。
情况1:变量的值由用户操作决定。 然后对rails对象方法进行ajax调用,以获得js的计算值。
情况2:变量的值由app(服务器端)确定。 然后你可以这样做:
<% @b = 1%>
JS和服务器方法可以使用相同的值。 但这不是一个干净的方法。 视图不应设置值。
此外,按照@ jeffD23的建议,将js保留在资产管道中