Rails 3の方法は、すべてのjavascriptをグローバルにアプリケーションに含めることのようです。私はこれで正しいですか?
理由は何ですか?
私が正しくない場合、ページ固有のJavaScriptを含める標準的な方法は何ですか?
ありがとう!
Rails 3の方法は、すべてのjavascriptをグローバルにアプリケーションに含めることのようです。私はこれで正しいですか?
理由は何ですか?
私が正しくない場合、ページ固有のJavaScriptを含める標準的な方法は何ですか?
ありがとう!
デフォルトでは、Rails 3 には/app/assets/javascripts 内の他のすべての JS ファイルに依存させることを含むapplication.jsが含まれます。//= require_tree
以下を追加することで、application.jsとapplication.html.erbを削除//= require_tree
し、コントローラー固有の JS を含めることができます。<%= javascript_include_tag "application" %>
<%= javascript_include_tag params[:controller].split("/")[0])
次に、以下を含む各コントローラーの JS ファイル ( app/assets/javascripts/CONTROLLER-NAME.js ) を作成します。
//= require application
これらはapplication.jsに依存しますが、独自の JS を持つこともできます。
この.split
メソッドを使用すると、Devise などのコントローラーが / の前に最初の名前を .js ファイルの名前として使用できるため、 devise /sessions.jsなどの代わりにdevise.jsを作成するだけで済みます。
特定のJavaScriptファイルを特定のビューページにのみ含めるには、次の手順を実行する必要があります。
i) In the assets folder create a separate folder eg. 'separate_view' , and inside put your specific js, and css files.
ii) In the application lay out write like following for 'separate_view'.
<%= yield :separate_view %>
iii) In your target template write the following for 'separate_view'.
<% content_for (:separate_view) do %>
<%= javascript_include_tag "xxx.js" %>
<%= stylesheet_link_tag "xxx.css" %>
<%end%>
上記は、特定のビューファイルでうまくいきます。
タグを使用しcontent_for
て、ページ固有のコンテンツをページの先頭に追加できます。
あなたの
javascript の下のapplication.html.erb (レイアウト ファイル) に次の行を追加します。
<%= content_for :js_include %>
次に、任意のページに、ページ固有の JavaScript を含めたい
<% content_for :js_include do %>
<%= javascript_include_tag "some_javascript_file" %>
<% end %>
javascript_include_tag に = 記号を含める必要があるかどうかはわかりません (application.html.erb
ファイルにそのまま配置するようにしてください。ただし、それがほとんどの要点です。content_for タグの使用
編集
役立つリンク
多くの方法:
<%= javascript_tag "...javascript..." %>
* Generates <script type="text/javascript">...javascript...</script>
または
<% content_for :script do %>
...javascript...
<% end %>
* This approach includes script into <%= yield :script %> defined in the template anywhere, for example inside the <head> dom:
<head>
...
<% if content_for?(:script) %>
<%= javascript_tag yield(:script) %>
<% end %>
</head>
または他の多くの方法。