javascriptなどのページ固有のアセットを配信することはおすすめしません。新しいページに移動すると、別のアセットのダウンロードが開始されるため、ユーザーエクスペリエンスが低下します。
Rails資産パイプラインの全体は、アセットを収集し、それらを縮小し、すべてを1つのファイルに連結して、ユーザーがページに初めて移動したときにブラウザが1回だけダウンロードすることです。
はい、jQueryを使用して、いくつかの動作を実行する特定の要素が存在するかどうかを確認します。
私が有用だと思ったのは、jsの振る舞いをページ固有のものではなく、ウィジェット固有のものとして考えることです。例えばDOM内にソート可能なテーブルがある場合、ソート可能なテーブルウィジェットを初期化します。すなわち、$(".sortable").sortable()
上記の例では、jQuery pluginsというパターンが使用されています。ビヘイビア/ウィジェットのロジックをjQueryプラグインの中に配置します。セレクタが要素を検出したときにのみ実行されます。 $("#nonexistant").something()
、something()
は呼び出されません。 $("#definitelyExists").somethingElse()
、somethingElse()
が呼び出されます。
上記の例では、ある要素が見つかってその関数が呼び出されたときに、その関数のthis
が一致する要素を参照し、その上で振舞いロジックを実行できます。