アセット パイプラインの Rails ガイド ドキュメントを読んでいます。マニフェストに require_tree ディレクティブがある場合、coffeescript ページ固有の生成されたファイルは、デフォルトでユーザーが使用できるようになっていると記載されています。これは私とはうまくいきません。これを含める必要があります
<%= javascript_include_tag params[:controller] %>
特定のコントローラーで。何が欠けていますか?
アセット パイプラインの Rails ガイド ドキュメントを読んでいます。マニフェストに require_tree ディレクティブがある場合、coffeescript ページ固有の生成されたファイルは、デフォルトでユーザーが使用できるようになっていると記載されています。これは私とはうまくいきません。これを含める必要があります
<%= javascript_include_tag params[:controller] %>
特定のコントローラーで。何が欠けていますか?
アセット パイプラインは、すべての JS を単一のファイルapplication.js
. 特定のページの JS を呼び出すには、コントローラーとアクションごとに JS を編成する必要があります。これを自動的に実行する RailsScript という gem があり、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!')
最初の段落を誤解したかどうかはわかりませんが、この行が意味するのは、application.js
マニフェストに次のような行が含まれている場合です。
//= require_tree .
そうです、確かに、その特定のページだけでなく、すべてのページに対して、ページ固有の javascript または coffeescript が読み込まれます。説明したようにアセットを特定のページに制限したい場合app/assets/javascripts/
は、コントローラーの複数形の名前を持つファイルが必要です.js
.
これをその特定のページの別のマニフェストとして個人的に作成し、複数のアセットをロードできるようにします。というコントローラーがあり、UsersController
そのコントローラーのビューで使用されるさまざまなアセットがあるとします。次に、質問に書いた行が機能するために必要なのは、ファイル.js
またはusers.js
ディレクトリです。users.js.coffee
app/assets/javascript
または、命名規則を維持するために、次のようにします。
<%= javascript_include_tag "application-#{params[:controller]}"%>
そしてもちろん、ファイルに適切な名前を付けます(application-users.js
)。
また、これを行うときは、ページ固有のアセットがすべてのコントローラーで読み込まれないようにする必要があります。単に行を削除し、必要に応じ//= require_tree .
て明示的な行に置き換えて//= require
ください。
一般的にアセットパイプラインを誤解していると思います。javascript ファイルを個別にロードするのではなく、すべての .js.coffee ファイルが 1 つの大きな js ファイルにコンパイルされ、このようにビュー/レイアウトに含める必要があります。
<%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>
1 つのビューでのみ使用できる js コードが必要な場合は、それをアセット パイプラインに含めないでください。
Rails でページ固有の JavaScript を実行する方法を次に示します。
jquery-readyselector.jsプラグインをインストールします。(18行です)
を。https://raw.github.com/Verba/jquery-readyselector/master/jquery.readyselector.jsの内容をコピーします
b. assets/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() {
});