Rails包含js到特定的视图

问题描述:

我知道这里已经回答了这里:Javascript Include Tag Best Practice in a Rails Application,但是我没有得到一些东西。Rails包含js到特定的视图

如何指定js文件位于:defaults标记中?我试图指定js的路径而不是使用标签。

在application.html.erb:

<head> 
    <title>...</title> 
    <%= csrf_meta_tags %> 

    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> 
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %> 
    <%= yield :head %> 
</head> 

鉴于:

<% content_for :head, javascript_include_tag('qEditor/http_cdn.quilljs.com_1.3.2_quill') %> 

此文件是在app/assets/javascripts/qEditor和根据IDE中的路径是正确的。我将application.js从//= require_tree .更改为//= require_directory .,这样js文件将不会被加载到别处。它不工作...

你能帮我解决这个问题吗?我在轨道上真的很新。谢谢

UPDATE

application.html.erb:

<!DOCTYPE html> 
<html> 
<head> 
    <title>....</title> 
    <%= csrf_meta_tags %> 
    <%= content_for :assets do %> 
    <%end%> 
    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> 
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %> 
</head> 

<body> 

<div class="container"> 
    <%= link_to 'Home', root_path, class: 'btn btn-default' %> 
    <button onclick="toggleTodos()" class="btn btn-default">Toggle TODO's</button> 

    <% flash.each do |key, value| %> 
     <div class="alert alert-<%= key %>"><%= value %></div> 
    <% end %> 


    <div class="jumbotron"> 
    <%= yield %> 
    </div> 

</div> 

</body> 
</html> 
+0

您可以将js文件存根手动加载,然后将其添加到'Rails.application.config.assets.precompile'中的assets.rb文件中,然后使用'javascript_include_tag'将其添加到您的视图中 。 –

+0

如果您将文件放在'vendor/assets'文件中,那么无论如何您都应该放置供应商内容,则不需要存根@SebastiánPalma – max

+0

我现在看到了,感谢提示@max。 –

对供应商的内容的正确位置(任何未具体项目或由您撰写)是/vendor/assets/javascripts。这也可以解决您的问题,因为不需要//= require_tree .

所以移动到/vendor/assets/javascripts/http_cdn.quilljs.com_1.3.2_quill.js

/vendor/assets位于链轮默认资产查找路径上。

<head> 
    <title>...</title> 
    <%= csrf_meta_tags %> 
    <%= content_for :assets do %> 
    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> 
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %> 
    <% end %> 
</head> 

由于content_for会连接你可以再补充一个content_for(:assets)添加额外内容:

<% content_for :assets do > 
    <%= javascript_include_tag('http_cdn.quilljs.com_1.3.2_quill') %> 
<% end %> 

这也可以让你在使用的情况下或provideconcat: false要覆盖由布局提供的块。

+0

我认为它的工作,但它不是...对不起。你能检查我的application.html.erb是否正确? – Wlad

+0

“它不工作”是世界上最无用的信息。具体是什么不起作用?你必须自己调试你的应用程序。 – max

+0

什么是不工作的是,js文件没有加载在视图中。我怀疑我不太了解应该如何在application.html.erb中声明“”,因为其他部分非常清晰。 – Wlad