我正在閱讀資產管道的導軌文檔。 它指出,如果清單上有require_tree指令,則默認情況下咖啡腳本頁面特定的生成文件 已準備好供用戶使用。 這不是我的工作我必須做包括本如何加載頁面特定的rails 4 js文件?
<%= javascript_include_tag params[:controller] %>
特定的控制器上
。 我錯過了什麼?
我正在閱讀資產管道的導軌文檔。 它指出,如果清單上有require_tree指令,則默認情況下咖啡腳本頁面特定的生成文件 已準備好供用戶使用。 這不是我的工作我必須做包括本如何加載頁面特定的rails 4 js文件?
<%= javascript_include_tag params[:controller] %>
特定的控制器上
。 我錯過了什麼?
我認爲你對一般的資產管道存在誤解。它不單獨加載的JavaScript文件,而是所有的.js.coffee文件會被編譯成一個大的js文件,你有你的看法,包括/佈局這樣
<%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>
如果你需要一些只能在一個視圖中使用的js代碼,你絕對不應該把它包含到資產管道中。
不知道如果我誤解了你的第一個段落,但我覺得行的意思是,如果你的application.js
清單包含這樣一行:
//= require_tree .
然後是確實,頁面特定的JavaScript或CoffeeScript的將被加載,不僅針對該特定頁面,針對所有頁面。如果您想要將資產限制爲您描述的特定頁面,則需要使用app/assets/javascripts/
中的文件以及控制器的複數名稱,.js
。
我個人將其創建爲該特定頁面的另一個清單,這樣我可以加載多個資產。假設你有一個名爲UsersController
的控制器,其中包含該控制器視圖使用的各種資產。爲了使您在問題中編寫的行能夠正常工作,您需要在app/assets/javascript
目錄中提供或users.js.coffee
的.js
。
另外,保持命名約定,我做這樣的事情:
<%= javascript_include_tag "application-#{params[:controller]}"%>
然後當然我的名字適當的文件(application-users.js
)。
此外,當你這樣做時,你會想停止加載所有控制器的頁面特定資產。只需刪除//= require_tree .
行,並根據需要將其替換爲明確的//= require
行。
資產管道將將您的所有JS壓縮爲一個文件application.js
。爲了給特定頁面調用JS,你需要通過控制器和操作來組織你的JS。有一個gem,RailsScript可以自動執行此操作,它與Turbolinks兼容,它可以爲您提供單頁應用程序的感覺。
RailsScript只需要幾分鐘的時間學習,https://github.com/gemgento/rails_script。
使用Rails腳本一個具體的例子:
# app/assets/javascripts/users.js.coffee
window.App ||= {}
class App.Users extends App.Base
show: ->
alert('The users#show action!')
這裏有一種方法做特定頁面的JavaScript中軌。
安裝jquery-readyselector.js插件。 (這是18行)
a。複製內容https://raw.github.com/Verba/jquery-readyselector/master/jquery.readyselector.js
b。將內容粘貼到資產處的新文件/ javascripts/jquery_readyselector.js
c。需要jQuery的readyselector
// assets/javascripts/application.js
//= require jquery_readyselector
//= require_tree .
創建CSS類,所以我們有辦法單獨引用每個頁面。
<%# views/layouts/application.html.erb %>
<body class="<%= controller_name %> <%= action_name %>">
現在我們可以使用CSS將我們的javascript範圍擴展到我們的頁面。
// assets/javascripts/posts.js
$(".posts.index").ready(function() {
});
試過嗎? –
@MichaelSzyndel我有同樣的東西,是的。我寫錯了什麼嗎? –
據我所知,這不應該在啓用資產管道的生產中工作。當然,你可以禁用資產管道,但這不是一個好的解決方案。 –