2011-07-26 8 views
3

coffeescriptテンプレート内からRubyインスタンス変数にアクセスするにはどうすればよいですか?coffeescriptテンプレート内のsinatraクラス変数へのアクセス方法

sinatraのドキュメントでは、テンプレートはそのテンプレートを呼び出すroutと同じスコープ内で評価されると言われています。

だから、私はシナトラアプリを次ています

server.rb

require "sinatra" 
require "coffee-script" 

get '/app.js' do 
    @str = "Hello" 
    coffee :app 
end 

とビュー/ app.coffeファイル内を私は@str変数を使用したいと思います。出来ますか?もしそうなら、どうすれば@strの変数にアクセスできますか?

答えて

6

コーヒーソースファイルをerbのようなもので処理する場合にのみ可能です。だからもしあなたがrailsアセットパイプラインを使うならば、ファイル拡張子に.erbを追加するだけで、ファイルはerbで処理されてからコーヒーに送られます。私はsinatraであなたと同様のものをまとめなければならないと思います。

アイデアは1本に近くなる - http://www.sinatrarb.com/intro#Textile%20Templates

P.S:アプリケーションの異なる層からのアクセスの変数はとにかく悪い考えです。あなたがスプロケットと呼ばれる宝石によって駆動RAILSでamultistageテンプレートコンパイルプロセスを持っている

EDIT

。あなたは

@magic = "Crazy" 

Railsは最初のERBファイルを処理しますが、変数インスタンスを追加するには、コントローラで

class <%= @magic %> 
    doSomthing: -> 
     console.log "hello" 

/app/views/foo/show.js.coffee.erb呼ば例えばファイルで始まりますそして

class Crazy 
    doSomething: -> 
     console.log "hello" 

第二に、それは

を生成するために、CoffeeScriptのファイルを処理を生成し、

これがアセットパイプラインと呼ばれる理由です。より一般的には、それを と呼ぶことができます。あなたが何をしているのか知っていれば、Sinatraでスプロケットを走らせることができます。しかし、ちょうど からRails 3.1を使用した方があなたの人生は楽になります。

+0

お返事ありがとうございます。たぶん、私はあなたがCoffeeScriptに地元の人々をどのように渡すことができるか知っていますドキュメンテーションはそれについて何も言わない。最初はsinatraがhamlテンプレートに似たコーヒーテンプレートを扱うが、htmlと同じjsを作成することは可能であるが、 –

+0

私の答えを見てください。あなたは地元を渡すことはできませんが、あなたはそれをコンパイルする前にテンプレートエンジンでコーヒースクリプトのソースコードを前処理することができます – iafonov

+0

iafonovとbradgonesurfing、大きな感謝!私は、 "<%= @str %>"のように、 "coffee(erb:app)"のような処理を行い、ルーブルコードをコーヒースクリプトに埋め込むことが可能であることを発見しました。ちょうどあなたがiafonovを言ったように。唯一の欠点は、 "views"フォルダ内のファイルを "app.erb"と呼ぶ必要があることです。IMHOはファイルの真の性質を隠しています。そのため私はローカルのsinatra gemをハッキングし、新しいオプション ":preprocess"を追加しました。 "coffee:app、:preprocess =>:erb"のようなもので、テンプレートファイルを "views/app.coffee.erb"として保存します。 bradgonesurfingのように動作します。はるかに良く清潔です。 –

1

私はRailsのためにこれを書いた:https://github.com/ludicast/ice

を、それは簡単にシナトラのために適合させることができます。

これは、RubyモデルをCoffeescriptに公開して、Railsアプリケーション内でEcoとCoffeeKupテンプレートを使用できるようにします。

ネイト

関連する問題