web-dev-qa-db-ja.com

underscore.jsテンプレートの各ループ

ここで何か間違ったことをしていますが、見えません!アンダースコアテンプレートで配列をループしようとしています。それは動作しませんが、何かが欠けています、ここに私のコードがあります、それ以外の場合は私のテンプレートはうまく動作します、それはバグである_.eachのものだけです:

<script type="text/template" id="PageContent">
    <div class="col2">
        <@ _.each([0,1,2,3,4], function(i) { @>  <p><@ i @></p> <@ }); @>
    </div>    
</script>

また、次のようなテンプレート設定もいくつか行いました。

_.templateSettings = {
    interpolate: /\<\@(.+?)\@\>/gim
};
26
Joel

カスタムテンプレート設定で補間正規表現のみを定義しているため、アンダースコアは式を評価するタイミングを認識しません。カスタムテンプレート設定を定義するときは、補間と評価を定義して区別する必要があります。アンダースコアtemplate()ドキュメントから:

補間正規表現を定義し、(オプション)正規表現を評価して、それぞれ挿入および評価する必要がある式に一致させます。評価正規表現が提供されない場合、テンプレートは値の補間のみが可能になります。

標準(カスタム設定なし)テンプレートでは、違いは評価です:<% %>および値の補間:<%= %>

したがって、たとえば、上記のテンプレートは(標準のテンプレート設定で)次のようになります。

<% _.each([0,1,2,3,4], function(i) { %>  <p><%= i %></p> <% }); %>

カスタム設定を引き続き使用する場合は、_。templateSettingsで評価正規表現も定義する必要があります。あなたの質問やコメントに基づいて、次のようなものです:

   _.templateSettings = {
      interpolate: /\<\@\=(.+?)\@\>/gim,
      evaluate: /\<\@(.+?)\@\>/gim
  };

次に、テンプレートを更新して、コードブロックの周りの評価フォームと値の周りの補間フォームを使用します。

<script type="text/template" id="pageContent">
    <div class="col2">
        <@ _.each([0,1,2,3,4], function(i) { @>  <p><@= i @></p> <@ }); @>
    </div>    
</script>

ソース: http://documentcloud.github.com/underscore/#template

65
mjtognetti