2013-03-25 5 views
10

私は、(require.jsを使用して)バックボーンのアンダースコアでハンドルバースタイルのテンプレートを使用しようとしています。アンダースコアの補間設定

<div><%= title %> | {{ title }}</div> 

私は、ブラウザで以下の取得:

Correct title | {{ title }} 

だから、それがどのように見える私がテストを設定している私のテンプレートで

_.templateSettings.interpolate = /\{\{(.+?)\}\}/g; 

: 私は、次の持っています標準のアンダースコアテンプレート設定が機能しており、ハンドルバーのスタイル設定が無視されています:

しかし、私はクロームで、コンソールで確認した場合、私は

(それが正しいはずのように私には見えた)これを取得
_.templateSettings 
Object {evaluate: /<%([\s\S]+?)%>/g, interpolate: /\{\{(.+?)\}\}/g, escape: /<%-([\s\S]+?)%>/g} 

すべてのアイデア、なぜこれが正しく動作していませんか?私はこれを行う場合は

答えて

16

は:#tにテンプレートを

_.templateSettings.interpolate = /\{\{(.+?)\}\}/g; 
var t = _.template($('#t').html()); 

を、私はエラーを取得する:

/<%([\s\S]+?)%>/g 
:うまくそれは正規表現を評価するというのが私の疑いを確認した

SyntaxError: Unexpected token '='

さんがあなたの<%= ... %>さんと一致しました。等号は\Sと一致しますので、評価正規表現は<%= ... %>となり、<%%>を除外し、_.templateが作成しようとするJavaScriptに構文エラーが残っています。

あなたは_.template source内部を見る場合は、正規表現が特定の順序でチェックされていることがわかります:

  1. escape
  2. interpolate
  3. evaluate

をだからinterpolateをします置き換えます<%= ... %>物事が捕まえられる(そして誤解される)ようになるt evaluate

evaluate正規表現も置き換えてください。

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

デモ:http://jsfiddle.net/ambiguous/SdLsn/

+0

おかげで、私は問題を回避するために、すべての3つの正規表現を交換するお勧めします。私はデモをチェックして、それはすべて正常に見えますが、私は以前と同じ結果を得ています。 Chromeのコンソールに正しい設定が表示されていますが、アンダースコアには以前の設定が使用されています –

+0

@jamieholliday:発注の問題の可能性があります。 jsfiddle.netのデモとあなたがやっていることの違いは何ですか? –

+1

これは設定でロードしていた方法で問題だったことが判明しました。私はrequireを使用しています。これは問題を引き起こしていました。あなたの正規表現を使用して、ここでの設定を適用することで問題をSovled:http://stackoverflow.com/questions/13057330 –