3

最初のページの読み込み後にサーバーから別の js ファイルを読み込む jQuery プラグインを使用しています。Rails 3.1 ではすべての js アセットが連結され、パブリック ディレクトリは js アセットの提供に使用されないため、このファイルを参照するにはどうすればよいですか? どこに置くの?

4

2 に答える 2

3

Sprockets ロード パス内のすべてのアセットは、実行時にアクセスできます。Railsコンソールでロードパスを確認できます

Rails.application.config.assets.paths

イニシャライザにロード パスを追加できます。

Rails.application.config.assets.paths << your_load_path

デフォルトでは、apps/assets/ および vendor/assets/ 内のすべてのアセットが自動的に読み込まれます。これらのアセットはディレクトリ内に配置する必要があります。assets/ ディレクトリ自体のファイルは読み込まれません。

http://mydomain.com/assets/myscripts/hello.jsapps/assets/javascripts/myscripts/hello.jsにアクセスして、 にあるアセットをロードできます。

連結は別の問題です。スプロケットは、スプロケットrequireprovideディレクティブを使用して指定したアセットのロード パスを検索し、それらから連結ファイルを構築します。

于 2011-05-28T11:38:55.817 に答える
1

これを達成する簡単な方法はないようです。Rails 3.1 内では、JavaScript ファイルと CSS ファイルの両方が単一のファイルに連結され、ブラウザーに送信されるようになりました。これは、Sprocketsライブラリを使用して実現されます。

これを実現するメカニズムには、./app/assets/javascripts/application.js ファイルの解析と、関連ファイルの場所を Sprockets に伝える Sprockets ディレクティブの検索が含まれます。

新しく生成された Rails アプリケーション内のまったく新しい application.js ファイルは次のようになります。

// FIXME: Tell people that this is a manifest file, real code should go into discrete files
// FIXME: Tell people how Sprockets and CoffeeScript works
//
//= require jquery
//= require jquery_ujs
//= require_tree .

これらは JavaScript へのコメントのように見えますが、Sprockets によって、クライアントに配信される単一の application.js を構築する方法を指示するディレクティブとして扱われます。require_treeおそらく、JavaScript ファイルに追加されている行であると推測できます。

Sprockets ディレクティブに関する豊富なドキュメントはないようです。ただし、ソースコードは十分に文書化されており、使用可能なディレクティブについて非常によく説明されています。

このrequire_treeディレクティブは、app/assets/javascripts ディレクトリ内のすべてのファイルを再帰的に含めます。したがって、サブディレクトリを作成し、そこに含めたくないファイルを配置することで、目的を達成できます。その後、 に変更できrequire_treeますrequire_path

これに代わる方法は、require filename必要な JavaScript ファイルごとに使用して、Sprockets に含まれるファイルを個別に手動で管理することです。

于 2011-05-26T13:49:09.777 に答える