2017-02-11 8 views
0

javascriptフォルダ内にcoffescriptファイルがあり、このフォルダ内にあると、railsによってすべてのビューに自動的に追加されますが、そのファイルが1つのビューでのみ使用されるようにしたいあなたがそれらを変更することができます他のビューに追加されます。特定のビューにcoffeescriptを追加する

+0

[Railsとページ固有のJavascript]の可能な複製(http://stackoverflow.com/questions/18724247/rails-and-page-specific-javascript) – Iceman

答えて

1

これは比較的一般的な問題ですが、特定のページでのみそのJavaScriptをレンダリングするためにできることがいくつかあります。

モジュールパターンを使用して

Javascriptのモジュールパターン

、あなたがそう(CoffeeScriptの中)のような匿名の閉鎖であなたのjavascriptのほとんどをラップすることをお勧めします:

do -> 
    # ... all vars and functions are in this scope only 
    # still maintains access to all globals 
    return 

そのあなたのクロージャ内のコード実行したい、このようなオブジェクト内にラップすることができます:あなたがそのように実行したいコードは、オブジェクト内の関数内にラップされ

(($) -> 
    myObj = myFunc: (param) -> 
    # do stuff ... 
    return 

    $('selector').click -> 
    myObj.myFunc() 
    return 
    return 
) jQuery 

、およびイベントが発生したときにそのオブジェクトを呼び出すことができます。単一のビューで実行したいコードが、クリック、ホバー、その他のイベントなどのユーザーのやりとりにのみ依存している場合は、このようなことができます。

ボディCSSクラス

レールでは、あなたのbodyタグにコントローラとアクションクラスを追加することができます。これを行うことで、javascriptを使用してボディのcssクラスをターゲットにし、現在のビューのクラスに基づいていくつかのコードを実行するかどうかを実行できます。それは一種の次のようになります。application.html.erb

<body class = "<%= controller_name %> <%= action_name %>" 

は、あなたが、あなたのCoffeeScriptのファイルで、あなたのarticlesコントローラのnewアクションのいくつかのCoffeeScriptを実行したいとしましょう:

if $('body').hasClass('articles') and $('body').hasClass('new') 
    # do stuff for the articles#new 
else 

パロマ宝石

あなたはpaloma gemをチェックアウトすることができますが、私は宝石がアクティブであるとは思いませんそれはもはや維持される。

私はそれが助けてくれることを願っています!

+0

ありがとうございますが、 require_treeを追加し、coffescriptとjavascriptのアドレスを指す "src"付きのタグを追加して、各ファイルに手動で追加する必要がある場合に備えて、プロジェクト全体で使用する必要がある場合に備えてレイアウトしますそれぞれの見解でそれは可能でしょうか? – LuisC

+0

はい、それは技術的には可能ですが、それは推奨され、優先するレールの方法とは大きく異なります。また、サーバーは潜在的にすべてのビューで異なるアセットを提供する必要があるため、パフォーマンス上の大きな問題になります。それでもやりたい場合は、アセットパイプラインの使用を忘れて、特定のJavaScriptファイルを使用するように各ビューを手動で設定する必要があります。私は上記のオプション2を推奨します。 – Mark

関連する問題