2011-11-23 9 views
16

私は趣味のアプリといくつかのjQueryを使用しています。結果は現時点では問題ありませんが、私はjQueryのnoobです。私はコード構造にいくつかの大きな改善があると思います。今のところCoffescriptを置いて、私が疑問に思っていたことの1つは、アセットパイプラインのモデル固有の.jsファイルを適切に使用する方法です。Rails 3.1のアセットパイプラインでjQueryを正しく使うにはどうすればいいですか?

例えば、私のUserモデルで作業しているときに、ドキュメントの準備ができたら実行したいコードがいくつかあるかもしれません。 Rails 3.1で生成されたusers.jsファイルの$(document).ready(function() {...});に入れてみましょう。

翌日、私はペットモデルで作業しています。ドキュメントを実行したいコードが用意されています。私はそれをpets.jsファイルの中の別の$(document).ready(function() {...});に入れて、Railsが準備します。

  1. アプリの実行時にどのようにそれをコンパイルん:私の疑問が生じたのはここ

    ですか?

  2. 上記の例で2つのjQueryインスタンスをインスタンス化していますか?
  3. アプリ内で$(document).ready(function() {...});を1回だけ使用するか、Railsが自分のコードを1回の呼び出しでコンパイルする必要がありますか?
  4. モデル固有のファイル.jsにはどのようなものが含まれていますか?
  5. 開発モードと本番モードでの実行方法に違いはありますか?

答えて

12

1)コンパイル:Railsのアセットパイプラインは、すべてのjavascriptファイルを1つの大きなファイルにまとめただけです。

2)jqueryのは一度だけロードされ、)あなたは、複数の$(document).readyの機能を有するされているが、それは問題

3ないRailsはコールで何もしていない、とjQueryは安全にこれらのブロックあたりのより多くを扱うことができますページ。

4)モデル固有の.jsと呼んでいますが、コントローラ固有のものを呼び出すことにします。一緒に属している機能をまとめてグループ化します。それらを結びつけることがコントローラであるかモデルであるかは本当に重要ではありません。私たちはjsを分割して別々のファイルに分割し、管理しやすくしました。

5)開発中、資産はすべての要求でコンパイルされます。本番では、1回だけ実行されます。また、生産時には、圧縮して圧縮することもできます。

これが役に立ちます。

3

私はこれらのいくつかにあなたに答えようとします。ページごとに1つのドキュメントレディコールが本当に必要になりますが、倍数がある場合は問題ありません。それらに含まれるものは、DOMがブラウザに読み込まれると実行されるコードになります。 Railsはjavascriptで魔法を使うことはありません。ファイルに書いたものと同じままです。 Railsはjavascriptコードをファンキーな方法でコンパイルしません。実稼働環境ではRailsはそれを小さくすることができますが、実際のコードはほぼ同じです。これは、サーバーではなくブラウザによって実行されます。

jQueryが1回だけロードされて参照されるため、2つのインスタンスをインスタンス化していません。 $(document).ready()呼び出しは本質的に単なる関数に過ぎません。

モデル固有のjqueryファイルは、Ajaxと組み合わせてレールアプリで使用できます。したがって、あなたは 'create.js.erb'のようなファイルを持つことができます。これは実際にはrailsのアクションを渡すことができるjavascriptファイルです。あなたが作成/削除ポストの後にいくつかの特定のコードを発射したいなら、このようなファイルを使用することができます、あなたはあなたのレールコントローラのjavascriptに応答する必要がありますが、これは少し深くなります。上記のあなたの質問の外見。

jqueryはちょうどjavascriptでjavascriptはブラウザによって実行されます。フロントエンドでは動的な統合がなく、常にクライアントサイドで実行され、jqueryは主にDOM操作のために素晴らしいです。

うまくいけば、それはいくつかのものをクリアします!

+0

お寄せいただきありがとうございます。 – Clay

関連する問題