2016-05-13 6 views
0

私はいくつかのjsファイルを持っており、それらをvendor/assets/jsに入れています。次に、アプリケーションjsファイルでそれらを必要とします。Railsアセットパイプライン - 頭にjqueryだけを追加する

​​

ページの上部jqueryが必要で、jquery_ujsがjqueryに属しています。今、アプリケーションjsファイルを次のようにロードします。

<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>  

問題は、ページが最初にロードされる必要がある..html.erbファイル内にいくつかのjsコードがあることです。しかし、私はjsファイルにそれらをマージしたいと思います。私がやりたいことは、headタグ内のjqueryだけを呼び出し、bodyのアプリケーションjsファイルを呼び出すことです。しかし、私がjquery gemを取り除いてそれを呼び出すと、

<%= javascript_include_tag 'jquery.min', 'data-turbolinks-track' => true %>  

Railsはjquery_ujsについてエラーを返します。もちろん、jquery_ujsも追加できます。しかし、ベストプラクティスは何ですか?

+1

ターボリンクを使用するベストプラクティスは、できるだけ多くのスクリプトを頭に付け加え、本文には絶対不可欠なスクリプトだけを用意することです。あなたのhtml.erbファイル内の本文からスクリプトを頭に引っ張ってみてください。壊れている場合は、それを体に移動してください。 – Anand

答えて

3

ページ固有のjsコードをレールアプリに追加する最も難しい方法(つまり、ライブラリまたはスクリプトが1ページに必要なときにすべてのページにjsを読み込まないようにする)は、レイアウトの最下部に追加することです右の終了bodyタグの前に/application.html.erbファイル:

<%= yield :javascript %> 

    </body> 
</html> 

その後、あなたはすべてのHTMLタグの後に、それの一番下にこれを置くべきではJavaScriptのいくつかのスニペットを実行するために探しているとの見方で閉鎖されました。それはいくつかのdiv内またはそのビュー内の何かではなく、それの最下部にあることを確認してください。

参照更新フレッド:

<%= content_for :javascript do %> 
    <script type="text/javascript"> 
    $(document).on('page:load', function() { 
     all your code here.. 
    }); 
    </script> 
<% end %> 

このコードは、今だけ、あなたが必要とする代わりに、あなたの資産/ JSの中で他のすべての資産と一緒に連結されている特定のビューにロードするレイアウトビューの下部に屈したことになりますフォルダ。私は、アプリケーション全体ではないすべてのカスタムjでこれを行い、維持/デバッグするのは非常に簡単です。

+1

ターボリンクを有効にすると、readyイベントにバインドするのではなく、page:load(またはturbolinks:load for turbolinks 5)にバインドする必要があります。そうでなければ、ブラウザキャッシュからページを取得するときに呼び出されません – Fred

関連する問題