如标题中所述,我希望阻止特定资产的缓存,即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
。这甚至可能吗?
环境信息:
由于
答案 0 :(得分:0)
我可以建议2个选项:
1)使用内联js设置变量:
<%= javascript_tag do %>
window.something = '<%= j SomethingHelper.get_something.to_json %>';
<% end %>
2)将变量存储在html中并从js中调用它:
#html
<body data-something="<%= j SomethingHelper.get_something.to_json %>">
</body>
#js
$("body").data("something");
答案 1 :(得分:0)
您正在将前端业务逻辑与数据结合在一起。这是不可取的,也是我不使用或推荐在大多数情况下使用ERB + JS的原因之一(尤其是像Rails教程和指南一样的响应触发行为都热衷于这样做)。你最好还是......
meta
标记以及相关信息。例如:
# /app/views/layouts/application.html.erb
<%= tag :meta, name: 'something', content: @something %>
# /app/assets/javascripts/application.js
$('meta[name="something"]').attr('content');