2

Rails で jQuery の ready イベントを使用すると、奇妙なことに気付きます。<head>スクリプト タグ内に直接、または を使用して含まれるアセット パイプライン ファイルにハンドラーがセクションに追加された場合、ハンドラーは<%= javascript_include_tag ...最初のページ リクエストでのみ実行され、後続のリクエストでは実行されません。つまり、ページをロード/更新するための明示的なブラウザー アクションはそれを実行しますが、リンクをクリックすることによってトリガーされる新しいページ ビューは実行しません。

一方、に含まれている<body>場合は、期待どおりに、すべてのページ ビューで毎回起動します。

<head>
<script>
jQuery(document).ready(function(){
    console.log('READY in head'); // Fires on first page load only
});
</script>
</head>

<body>
<script>
jQuery(document).ready(function(){
    console.log('READY in body'); // Fires every time
});
</script>
</body>

本当に混乱しています。すべての Rails アプリで見られますが、jQuery はクライアント側のテクノロジであるため、Rails がこれにどのように影響するかわかりません??

4

2 に答える 2

3

RailsApps プロジェクトから:

Rails アセット パイプラインは、新しい Turbolinks 機能により、Rails 4.0 でさらに重要になります。Turbolinks は、現在のページ インスタンスを維持し、ページの BODY (および HEAD 内のタイトル) のみを置き換えることにより、パフォーマンスを向上させます。HEAD 要素がページ間で同一である限り、Turbolinks メカニズムはその「ターボ」速度ブーストを提供できます。これにより、特定のページで余分なスクリプト タグを避けることが重要になります。

于 2013-07-19T13:09:04.323 に答える