インスタンス変数を設定しているRailsコントローラがあります -
@user_name = "Some Username"
私の .slim テンプレートでは、コーヒーエンジンを使用して JavaScript を生成し、クライアント側の JavaScript コードからユーザー名を出力したいと考えています。
coffee:
$(document).ready ->
name = "#{@user_name}"
alert name
しかし、これは生成される JavaScript ですか?
$(document).ready(function() {
var name;
name = "" + this.my_name;
alert(name);
}
CoffeeScript コードでコントローラーインスタンス変数にアクセスするにはどうすればいいですか?
CoffeeScript を使用する場合、 haml でも同じ問題が発生すると予想されるため、これを haml としてタグ付けしています。
ベストアンサー1
何が起こっているかというと、これは"#{@user_name}"
CoffeeScript として解釈されており、評価されて CoffeeScript ソースに挿入される Ruby コードとしては解釈されていないということです。「Ruby 変数を CoffeeScript ソースに挿入するにはどうすればいいですか?」と質問しているわけです。
簡単に答えると、これはやめましょう。Rails チームは、3.1 ではテンプレートに埋め込まれた CoffeeScript をサポートしないという意図的な決定を下しました。これは、リクエストごとに CoffeeScript をコンパイルする必要があるため、パフォーマンスに大きなオーバーヘッドが生じるためです (任意の文字列をソースに挿入できるようにすると、この作業が必要になります)。
私のアドバイスは、Ruby 変数を純粋な JavaScript として個別に提供し、それらの変数を CoffeeScript から参照することです。例:
javascript:
user_name = "#{@user_name}";
coffee:
$(document).ready ->
name = user_name
alert name