【问题标题】:How do I use javascript_include_tag with js.erb file in Rails 4?如何在 Rails 4 中将 javascript_include_tag 与 js.erb 文件一起使用?
【发布时间】:2015-08-25 18:17:41
【问题描述】:

这是我的看法:

<%= javascript_include_tag "social_sharing.erb" %>

然后我有:assets/javascripts/social_sharing.erb.js,其中包括一些 ERB 标签,例如 &lt;%= post.id %&gt; ...

第一个问题是我看到这个错误信息:

`Asset filtered out and will not be served: add `Rails.application.config.assets.precompile += %w( social_sharing.erb.js )` to `config/initializers/assets.rb` and restart your server

如果我按照这些指示进行操作,我会得到 js 文件,但没有一个 ERB 标签已经过评估,所以我仍然在链接的 js 文件中看到 &lt;%= post.id %&gt;

【问题讨论】:

  • 你的域名应该是js.erb&lt;%= javascript_include_tag "social_sharing" %&gt; 就足够了。

标签: javascript ruby-on-rails ruby ruby-on-rails-4


【解决方案1】:

该文件应命名为assets/javascripts/social_sharing.js.erb(末尾带有.erb),否则Rails 资产管道将不知道如何处理它,并将其作为普通JavaScript 提供服务。包含标签应为&lt;%= javascript_include_tag "social_sharing.js" %&gt; 而不是.erb,尽管the .js is optional

assets 文件夹中的所有内容都将通过asset pipeline 进行处理,并且可以通过asset helper tags 轻松拉入。

但是,javascript_include_tag 和资产管道适用于真正的静态资产,它们只会被预编译一次,然后为每个相关请求提供相同的文件。如果您尝试包含动态内容(例如 &lt;%= post.id %&gt;),这些内容会因请求而异,您可能希望将 .js.erb 文件移动到视图目录中的某个位置并将其呈现为部分,类似于this question的第一个答案:

<script>
    render partial: '[somewhere]/social_sharing', post: @post
</script>

该文件也需要重命名为_social_sharing.js.erb

【讨论】:

  • 知道如何让我的 rails 变量在 js.erb 中工作吗?例如,post 为零
  • 第一个答案here 可能会有所帮助,您可能需要将 .js.erb 渲染为
  • 谢谢。我想这并不是一个真正令人敬畏的不显眼的做事方式,但它现在可以让我的 js 从我的视图文件中删除。
  • 上面写着“名称为 [somewhere]/social_sharing 的部分缺失”,应该是 .html.erb 吗?
  • @htafoya 文件在views目录下吗? [somewhere] 应该是视图目录中的路径,以便 Rails 知道在哪里查找部分。例如,文件的完整路径可能类似于 app/views/posts/_social_sharing.js.erb。该文件应为 .js.erb,除非它包含除 JavaScript 代码之外的 HTML。
【解决方案2】:

我不确定这是不是答案,但是您对资产管道所做的操作相对于 javascript 看起来很不寻常。

要将 js 包含在您的资产预编译中,请在 /config/initializers/assets.rb 文件中添加这一行。

Rails.application.config.assets.precompile += %w( social_sharing.js )  

我认为,一旦您在资产管道编译中包含此文件,您就根本不需要使用 javascript_include_tag

如果你尝试这个,如果你仍然有错误和/或渲染问题,请告诉我。

【讨论】:

  • 嗨,这通常是我所做的,但我想将它包含在一个页面中,抱歉。
  • "将其包含在一个页面中" rails 中的所有资产都被编译,甚至像 jquery 这样的库也被编译到 application.js 中。您在 RoR(个人资料)中拥有很高的代表,所以您知道这些东西。所以我想,我不确定你要做什么。
  • 嘿,基本上我只是想从我的 html.erb 文件中移动一个 js 的 sn-p,但仍然有可用于 js 的实例变量。我猜javascript_include_tag 更适合静态资产等。所以我可能一开始就以错误的方式处理事情。你的答案没有错,所以我会支持你。
  • 谢谢。有趣的问题,也赞成。我还从接受的答案中学到了一些东西。
猜你喜欢
  • 2018-09-21
  • 1970-01-01
  • 2013-09-19
  • 2015-08-19
  • 1970-01-01
  • 2022-01-22
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多