2

私は

def new 
  @test_var = 'i want this to show'
end

私がやりたいのは、そのページに呼び出されたjavascriptにそれを挿入することだけです。例えば:

#app/assets/javascript/my_model.js.coffee.erb
$ ->
  console.log('<%= @test_var %>')

コントローラにアクセスする前にcoffeescript/erbがコンパイルされるため、これは機能しないと思います...したがって、3.1でコントローラ変数をJavaScriptファイル(クライアント側-ajax経由ではアクセスしない)に挿入したい場合は、どうすればいいですか?

4

1 に答える 1

5

問題は、アセットパイプラインがすべて間違っていると考えていることだと思います... アセットは有効な言葉です。

ビューパイプラインではありません。資産である他のもの?画像とcssファイル、前処理してそのまま提供できるもの。アセットのerb/前処理は、ページの読み込み/リクエストごとに発生するのではなく、起動/ファイルの変更時に発生するため、本番環境では、アセットを最適化、キャッシュ、静的に提供できます。

ライブコンパイルを使用してそれを実現する方法をおそらく理解できますが(http://guides.rubyonrails.org/asset_pipeline.htmlのセクション4.2を参照)、ドキュメントにあるように:

このモードはより多くのメモリを使用し、デフォルトよりもパフォーマンスが低下します。推奨されません。

悪い答えは「JavaScriptをビューに挿入する」ですが、JavaScriptをRailsコントローラー/ビューから切り離すことは良い考えです。

より良い答えは、すべてのコントローラーjavascriptを含むアセットフォルダーを用意し、「私はどのページにいますか?」を使用することです。コードを実行するかどうかを決定するjavascript。

これに対するさまざまなアプローチを説明するいくつかの回答があります。

Rails 3.1アセットパイプライン:コントローラー固有のスクリプトをロードする方法は?

Rails 3.1を使用して、「ページ固有の」JavaScriptコードをどこに配置しますか?

于 2011-09-22T02:36:53.907 に答える