4

如标题中所述,我想防止缓存特定资产,即 javascript 文件something.js.erb。情况如下:

内容something.js.erb

...
var something = <%= SomethingHelper.get_something.to_json %>;
...

它成功地绑定值,SomethingHelper但只绑定一次,除非手动编辑 javascript 文件,否则var something永远不会再次分配值。

这可能在某种程度上是意料之中的,但显然不能满足我的需求。SomethingHelper.get_something根据调用时间输出变化。something.js所以我需要在我的编译文件中查看最新数据。

我的确切需求:

  • 我不想整体禁用资产管道缓存
  • 我只想something.js.erb在每次请求时呈现。

这甚至可能吗?

环境信息:

  • 导轨 4
  • 发展模式
  • Rails 自己的服务器,但将在产品上的 nginx 上

谢谢

4

2 回答 2

0

您正在将前端业务逻辑与数据结合起来。这是不可取的,也是我在大多数情况下不使用或不推荐使用 ERB + JS 的原因之一(尤其是像 Rails 教程和指南这样热衷于做的响应触发行为)。你最好还是……</p>

  1. 触发请求以从您的 JavaScript 中获取数据。
  2. 如果变量将在每个页面(或接近页面)上使用,并且是相对简短的非二进制数据,您可以meta在布局中嵌入带有相关信息的标签。

例如:

# /app/views/layouts/application.html.erb
<%= tag :meta, name: 'something', content: @something %>

# /app/assets/javascripts/application.js
$('meta[name="something"]').attr('content');
于 2013-05-26T23:37:51.910 回答
0

I can suggest 2 options:

1)Use inline js to set variable:

<%= javascript_tag do %>
  window.something = '<%= j SomethingHelper.get_something.to_json %>';
<% end %>

2)Store the variable in your html and call it from your js:

#html

<body data-something="<%= j SomethingHelper.get_something.to_json %>">
</body>

#js

$("body").data("something");
于 2013-05-26T23:14:25.797 回答