1

RoR 有渲染视图的控制器。有一天,我想要一个控制器,不仅要渲染一个特定的视图,还要在渲染后使用来自控制器的数据(例如@product)运行一些 javascript 代码。


1.内联javascript

所以我去了我的products/show.html.erb并写了如下内容:

<%= javascript_tag "alert('#{@product.name} is just awesome!')" %>


2. 带有服务器数据的资产

但是我们都是成年男孩并且知道不显眼的 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!');
});

但我记得资产正在生产中预编译并继续思考。


3. HTML数据属性

将一些数据传递给 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!');
  );
});


4. 再向服务器发出一个请求

无论如何,如果您希望能够缓存您的视图文件和资产,似乎将数据传输到 javascript 的唯一方法是使用额外的 Ajax 请求。我想知道创建一个将@product发送给客户的单独操作是否是一种好习惯?

谁能说,在渲染视图时将数据从服务器发送到 javascript 的最佳方式是什么?为什么?

4

0 回答 0