Slim テンプレート内の CoffeeScript エンジンでインスタンス変数にアクセスする方法 質問する

Slim テンプレート内の CoffeeScript エンジンでインスタンス変数にアクセスする方法 質問する

インスタンス変数を設定している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

おすすめ記事