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

私はインスタンス変数を設定しているRailsコントローラを持っています –

@user_name = "Some Username"

私の.slimテンプレートでは、javascriptを生成するためにコーヒーエンジンを使用していて、クライアントのsie
javascriptコードからユーザー名を出力したい –

coffee:
  $(document).ready ->
    name = "#{@user_name}"
    alert name

しかし、これは生成されているJavaScriptですか?

$(document).ready(function() {
    var name;
    name = "" + this.my_name;
    alert(name);
}

CoffeeScriptコードのコントローラインスタンス変数にはどうすればアクセスできますか?

CoffeeScriptを使用しているときに同じ問題が発生すると思いますので、これをhamlとしてタグ付けしています。

ベストアンサー

起こっているのは、 "#{@ user_name}"
がCoffeeScriptソースとして評価され注入されたRubyコードではなく、CoffeeScriptとして解釈されていることです。あなたは、
“Ruby変数をCoffeeScriptソースにどのように注入するのですか?”

短い答えは:これをしないでください。
Railsのチームは、3.1のテンプレートに埋め込まれたCoffeeScriptをサポートしないことを意図的に決めました。なぜなら、あらゆる要求に対してCoffeeScriptをコンパイルしなければならないためにパフォーマンス上のオーバーヘッドが発生するからです(任意の文字列をソースに注入する場合、

私のアドバイスはRuby変数を純粋なJavaScriptとして個別に提供してから、それらの変数をCoffeeScriptから参照することです。

javascript:
  user_name = "#{@user_name}";
coffee:
  $(document).ready ->
    name = user_name
    alert name

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です