RoR具有渲染视图的控制器。有一天,我希望控制器不仅可以呈现特定视图,还可以在渲染后使用来自控制器(例如 @product )的数据运行一些javascript代码。
所以我去了 products / show.html.erb 并写了类似的内容:
<%= javascript_tag "alert('#{@product.name} is just awesome!')" %>
但我们都是长大的男孩,并且知道不显眼的javascript ,所以我在我的布局中加入了一些javascript文件:
<%= javascript_include_tag "#{params[:controller]}/#{params[:action]}" %>
然后转到 app / assets / javascripts / products / show.js.erb 并写道:
$(document).ready(function(){
alert('<%= @product.name%> is just awesome!');
});
但是我记得资产在生产中被预先编译并继续思考。
将一些数据传递给javascript的另一种方法是在视图文件中使用html5数据属性:
<div class="product" data-product-name="<%= @product.name %>">
然后在你的资产中你可以写下这样的东西:
$(document).ready(function(){
$('*[data-product-name]').each(
alert($(this).data('product-name') + ' is just awesome!');
);
});
无论如何,如果您希望能够缓存视图文件和资产,似乎将数据传输到javascript的唯一方法是使用额外的Ajax请求。我想知道创建一个将 @product 发送给客户的单独操作是否是一个好习惯?
有人可以说,在呈现视图时将数据从服务器发送到javascript的最好方法是什么?