如何在js视图中将javascript变量传递给erb代码?

IT技术 javascript ruby-on-rails view erb
2021-03-14 01:28:03

我的 Rails 3 项目中有这个 Javascript 视图:

应用程序/视图/费用/new_daily.js.erb

var i = parseInt($('#daily').attr('data-num')) + 1;
//$('#daily').append('agrego fila ' + i + ' <br />');

$('#daily').append('<%= escape_javascript(render(partial: 'new_expense', locals: { i: i })) %>');

$('#daily').attr('data-num', i);

我想通过本地人将我的 'i' javascript 变量传递给 ruby​​ 部分,我怎么能做到这一点?

6个回答

据我所知,没有办法直接做到这一点,原因也很简单,html 在服务器端执行,而 javascript 是一种客户端语言,这意味着它在您的本地浏览器中执行,这就是为什么如果您甚至尝试要在两者之间传递一个变量,您必须向服务器发出请求,但是这个问题是通过调用 AJAX 请求来解决的,这个 AJAX 请求与向服务器发送新请求的作用相同,但是它没有刷新或重新加载页面会给用户一种没有发出请求的错觉。

一个人在这里问了一个类似的问题

你可以在 MDN 上了解更多关于 AJAX 的信息

+1 表示答案,-1 表示指向 w3shcools。每个 Web 开发人员都应该意识到 w3schools 非常糟糕,请查看w3fools以找出原因。应该使用 Mozilla Developper Center 来代替文档。
2021-04-30 01:28:03
仅供参考,HTML 不在服务器端执行,ERB 是。ERB 是用于生成 HTML 的模板语言。然后将 HTML 发送到客户端并在客户端呈现。
2021-05-07 01:28:03

是的,您可以使用 jquery 传递值;

<%=f.text_field :email ,:id=>"email_field" %>

<script type="text/javascript">
   var my_email= "my@email.com"
   $(document).ready(function(){
        $("#email_field").val(my_email);
   });
</script>
问题是如何将值从 javascript 传递到在 Rails 不显眼的 javascript 控制器操作响应(js.erb 文件)中呈现的 Ruby ERB 部分。此答案描述了如何使用 javascript 设置表单字段的值。所以这不是问题的答案,尽管拥有最多的选票。
2021-04-21 01:28:03
伙计们,除了属性之外,您还可以传递 object.id 吗?我在事件控制器的索引操作中使用带有引导模式的 fullcalendar,当窗口弹出时,我可以使用 fullcalendar 预先设置字段的表单属性值(所以我不需要预先使用 params[: id] 在控制器中)。我想将它作为 rails 表单提交的原因是要进行服务器端验证。你能告诉我如何将 id 传递给 form_for 助手来更新给定的对象,以及我的控制器索引操作在使用 @event 对象时会是什么样子吗?
2021-04-25 01:28:03
啊哈。所以现在,假设表单生成器 f。正在建模 :user,点击提交按钮会将“my@email.com”发送到 params[:user][:email] 中的 Rails。完美,这正是我要找的。
2021-05-12 01:28:03

简单的答案是你不能。部分在服务器端展开,JavaScript 变量稍后在客户端设置。您可以i(作为变量名)作为部分的参数并在那里使用它。

render :partial => 'xx', :locals => { :variable => 'i' }

并且在部分

alert(<%= variable %>);
为什么你声明你不能传递一个变量,然后提供一个与你的陈述相矛盾的例子,你本质i上是通过 JS 在客户端传递要提醒的内容
2021-04-23 01:28:03

看看 gon 宝石。https://github.com/gazay/gon

它为您提供了一个简单的对象,您可以将变量传递给该对象,该对象可通过以下方式用于您的脚本 window.gon

此处也参考 http://railscasts.com/episodes/324-passing-data-to-javascript

1)您可以在erb模板中创建一个带有全局变量的js标签,之后您将能够从任何js文件访问该变量

<%= javascript_tag do %>
   window.productsURL = '<%= j products_url %>';
<% end %>

2)您可以将数据传递给erb模板中的数据属性,并在客户端通过js访问它 $('#products').data('products')

<%= content_tag "div", id: "products", data: {products: Product.limit(10)} do %>
   Loading products...
<% end %>

3)您可以使用gon,在您的 js 中使用您的 Rails 变量

有一篇很好的文章,请阅读它并针对您的特定情况提供很好的解决方案 http://railscasts.com/episodes/324-passing-data-to-javascript,更多评论在这里http://railscasts.com/episodes/324 -passing-data-to-javascript?view=asciicast

感谢您提供指向 javascript_tag 的指针。标签中的那个和 eval 以一种非常简单的方式完成了这个技巧。我想 SO 用户会投票反对,因为这更具有模板性,而不是在运行时“通过”。但是,如果您可以在渲染页面时将数据从 erb 写入 DOM,为什么还要使用 AJAX 枪呢:)
2021-04-20 01:28:03