underscore.js模板中的每个循环

时间:2011-09-09 11:49:19

标签: backbone.js each 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
};

1 个答案:

答案 0 :(得分:65)

由于您只在自定义模板设置中定义了插值正则表达式,因此下划线不知道何时计算表达式。定义自定义模板设置时,需要定义和区分插值和评估。来自下划线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