2011-09-22 6 views
22

ではなく、に資産パッケージャとしてjammitを使用するrails 2.3アプリケーションで、テンプレート用にunderscore.jsテンプレートを使用しようとしていました。ここでUnderscore.jsテンプレートを使用したレール

は、単純なテンプレートです:

<script type="text/template" id="q-template"> 
    <div class="current-body"> 
     <span class="q-index"><%= title %></span> 
     <span class-"q-text"><%= body %></span> 
    </div> 
</script> 

RailsはこれらのようなERBの変数を解析しようとすると例外ArgumentError。この場合、アンダースコアテンプレートをレールでうまくプレイするにはどうすればよいですか?どこが間違っていますか?

答えて

52

代わり<%= %>のいくつかの他の区切り文字を使用してください。例えば、(評価)ヒゲスタイルのブラケット{{= }}(補間)と{{ }}を使用するために、あなたはJavaScriptにこのどこかに追加します。

_.templateSettings = { 
    interpolate: /\{\{\=(.+?)\}\}/g, 
    evaluate: /\{\{(.+?)\}\}/g 
}; 
+0

おかげで、これは動作します。私は_templateのドキュメントを参照していましたが、_.templateSettingsはそこに記述されていましたが、何らかの形で私がプロジェクトを設定していたときに何とかそれは気が抜けていました。 – papdel

+3

おかげFYI:http://documentcloud.github.com/underscore/#templateとhttp://stackoverflow.com/questions/5771742/underscore-js-templates-within-jsp – Francois

+6

'' {{}}を使用すると ' {{=}} 'は、テンプレートに' if(x){} 'スタイルブロックを使用したい場合、問題を引き起こす可能性があります。それは代わりに '[%=%] [%の%]'を使用している場合には、おそらく簡単だ 'と': –

25

あなたがプロジェクト全体のテンプレートの設定を変更したくない場合は... 。ERBエスケープ

タグ:<%=は終了タグがSTIであることを<%%=

<script type="text/template" id="q-template"> 
    <div class="current-body"> 
     <span class="q-index"><%%= title %></span> 
     <span class-"q-text"><%%= body %></span> 
    </div> 
</script> 

注意となりではなく、%%>である。


サイドノート - 私はまた、heredocを使用して出力を試みました。次のコードは正常に実行されますが、heredocコマンドの間に捕まえられるerbソースコードが出力されます。

<script type="text/template" id="q-template"> 
<%= <<-heredoc %> 
    <div class="current-body"> 
     <span class="q-index"><%%= title %></span> 
     <span class-"q-text"><%%= body %></span> 
    </div> 
heredoc 
</script> 
関連する問題