2017-10-14 59 views
0

我知道這裏已經回答了這裏: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。 –

回答

2

對供應商的內容的正確位置(任何未具體項目或由您撰寫)是/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中聲明「<%= content_for:assets do%>」,因爲其他部分非常清晰。 – Wlad