如何在 Meteor Spacebars 模板中重复 N 次块?

Posted

技术标签:

【中文标题】如何在 Meteor Spacebars 模板中重复 N 次块?【英文标题】:How can I repeat a block N times in a Meteor Spacebars template? 【发布时间】:2015-06-01 04:26:56 【问题描述】:

我在空格键模板中有这段代码:

1.
<select class="form-group">
  #each choices
    <option>this</option> 
  /each
</select>

我想重复此 N 次,每次递增数字,如下所示:

1.
<select class="form-group">
  #each choices
    <option>this</option> 
  /each
</select>
2.
<select class="form-group">
  #each choices
    <option>this</option> 
  /each
</select>
3.
<select class="form-group">
  #each choices
    <option>this</option> 
  /each
</select>

我希望能够将 N 传递给自定义模板标签来处理这个问题(例如 choices 3)。有什么好的 DRY 方法可以做到这一点?我有一个模糊的想法,我可以编写一个模板助手,但我不知道从哪里开始。

【问题讨论】:

【参考方案1】:

工作示例: http://meteorpad.com/pad/THAQfpfrru5MgAGnS/Copy%20of%20Leaderboard

您可以传入一个计数并返回一个任意对象的数组。不是最优雅的......但它确实有效!

HTML

<body>
  >content
</body>

<template name="content">
    #each loopCount 5
      <select class="form-group">
        #each choices
          <option>this</option> 
        /each
      </select>
    /each
</template>

JS

Template.content.helpers(

  choices: function()
    return ['choice1','choice2','choice3']
  ,

  loopCount: function(count)
    var countArr = [];
    for (var i=0; i<count; i++)
      countArr.push();
    
    return countArr;
  

);

【讨论】:

太棒了!这很好用。我在对象数组中添加了一个数字,并在块内使用它来显示我想要的编号:meteorpad.com/pad/rbyBzy4FzBtZauK8m/Repeat%20template%20block 当我提交该评论时,我意识到我可能只是将它们放在有序列表中。【参考方案2】:

如果您正在使用 Meteor 的下划线包,并且恰好使用 CoffeScript,您可以创建以下单行模板帮助程序:

t.helpers
  loop: (count) ->  for i in _.range count

然后你可以在你的模板中使用这个助手:

! Will display 'Output' 5 times 
#each loop 5
    Output 
/each

【讨论】:

如果这个例子也用纯 JS 编写会很棒 ES6: loop: (count) =&gt; new Array(count).fill()

以上是关于如何在 Meteor Spacebars 模板中重复 N 次块?的主要内容,如果未能解决你的问题,请参考以下文章

Meteor - 啥是 Spacebars.kw hash: Object

如何将带有参数的 Meteor Spacebars 助手传递给另一个助手属性?

meteor.js 和空格键 - 在嵌套循环中传递变量

如何在模板助手中使用 Meteor 方法

如何在 Meteor 模板文件中添加图像?

如何在 Meteor 中将全局模板助手放在一起?