5

私はif/else補間をUnderscore.jsとHAMLで動作させようとしていますが、役に立ちません。Underscore.jsの補間設定を次のように変更しています。

_.templateSettings = {
  interpolate : /\{\{([\s\S]+?)\}\}/g
};

これは、{{value}}のような表記法の中に値を補間しようとしているときにうまく機能します。ただし、if/elseステートメントを機能させることができません。私は次のものを持っています:

{{ if (true) { }}
  {{ val }}
{{ } }}

Javascript例外「UncaughtSyntaxError:Unexpectedtokenif」が発生します。ヘルプは大歓迎です。

4

1 に答える 1

10

アンダースコアテンプレートは、3つの異なる区切り文字のセットを使用します。

  1. evaluate<% ... %>:これは、デフォルトでJavaScriptのビット用です。
  2. interpolate<%= ... %>:これは、デフォルトで変数の内容をダンプするためのものです。
  3. escape:デフォルトinterpolateでは、HTMLをエスケープしますが、エスケープ<%- ... %>します。

これらはほとんどERB構文に一致します。式ではないJavaScriptで補間構文を使用しようとしています。

{{ if(true) { }}

しかしif、JavaScriptの式ではないため、これは機能しません。

おそらく、3つのパターンすべてをオーバーライドする必要があります。

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

次に、次のように言います。

{{ if (true) { }}
  {{= val }}
{{ } }}

テンプレートを単純な置換に制限できる場合は、テンプレートでinterpolate{{expr}}を使用できます。

于 2012-10-15T23:41:05.577 に答える