76

Rails 3.1 で新しいコントローラーを生成すると、コントローラーの名前を持つ JavaScript ファイルも自動的に追加されます。まず、この JavaScript ファイルは、関連するコントローラーが呼び出されたときにのみ使用されると思いました。

デフォルトでは、ツリー上のすべての JavaScript ファイルを含む -file に命令//= require_tree .があります。application.js

コントローラー固有のスクリプトのみをロードするにはどうすればよいですか?

4

6 に答える 6

122

必要な name_of_the_js_file.js ファイルのみをロードするには:

  1. から削除//=require_treeしますapplication.js

  2. js ファイル (特定のページが読み込まれたときに読み込むファイル) をアセット パイプラインに保持します。

  3. ヘルパーを追加するapplication_helper.rb

    def javascript(*files)
      content_for(:head) { javascript_include_tag(*files) }
    end
    
  4. あなたのレイアウトに譲る:

    <%= yield(:head) %>
    
  5. これをビューファイルに追加します:

    <% javascript 'name_of_the_js_file' %>
    

それなら大丈夫なはず

于 2011-07-22T20:08:26.810 に答える
83

これに対するエレガントな解決策は、javascript_include_tag で controller_name を要求することです。

http://apidock.com/rails/ActionController/Metal/controller_name/classを参照してください

<%= javascript_include_tag "application", controller_name %>

controller_name.js が読み込まれ、アセットにも含まれるため、ここから他のファイルを要求できます。

例、cars#index をレンダリングすると

<%= javascript_include_tag "application", "cars" %>

cars.js に含めることができる場所

//= require wheel
//= require tyre

楽しみ !

于 2011-10-20T03:56:10.513 に答える
28

私は常にこれをレイアウト ファイルに含めます。jsをアクションにスコープできます

<%= javascript_include_tag params[:controller] if AppName::Application.assets.find_asset("#{params[:controller]}.js") %>
<%= javascript_include_tag "#{params[:controller]}_#{params[:action]}"  if AppName::Application.assets.find_asset("#{params[:controller]}_#{params[:action]}.js") %>
于 2012-10-22T09:57:54.583 に答える
6

あなたの問題はさまざまな方法で解決できます。

アセットを動的に追加する

コントローラーの仕様がプリコンパイルされないため、これはプロダクション モードでは適切な解決策ではないことを考慮してください。

  1. 次のメソッドをアプリケーション ヘルパーに追加します。

    module ApplicationHelper
        def include_related_asset(asset)
        #          v-----{Change this}
            if !YourApp::Application.assets.find_asset(asset).nil?
                case asset.split('.')[-1]
                    when 'js'
                        javascript_include_tag asset
                    when 'css'
                        stylesheet_link_tag asset
                end
            end
        end
    end
    
  2. layout-fileでヘルパー メソッドを呼び出します。

    <%= include_related_asset(params[:controller].to_param + '_' + params[:action].to_param . 'js') %>
    
  3. コントローラー アクション用の特定のアセットを作成します。例)controller_action.js

YourAppアプリの名前に変更することを忘れないでください。

使用するyield

  1. <%= yield :head%>レイアウト ヘッドに追加する
  2. アクション ビューからアセットを含めます。

    <% content_for :head do %>
    <%= javascript_include_tag 'controller_action' %>
    <% end %>
    

詳細については、 Rails ガイドを参照してください。

于 2012-06-25T18:56:43.437 に答える