Meteor & Handlebars:每 N 项后的新行

Posted

技术标签:

【中文标题】Meteor & Handlebars:每 N 项后的新行【英文标题】:Meteor & Handlebars: new row after every N-items 【发布时间】:2016-06-11 08:56:47 【问题描述】:

我有这个标记:

<div class="row">
  #each items
    <div class="col-md-4>ItemHere</div>
  /each
</div>

我需要对行中的每 3 个元素进行分组,例如:

<div class="row">
  <div class="col-md-4>Item1</div>
  <div class="col-md-4>Item2</div>
  <div class="col-md-4>Item3</div>
</row>
<div class="row">
  <div class="col-md-4>Item4</div>
  <div class="col-md-4>Item5</div>
  <div class="col-md-4>Item6</div>
</row>
...

如何使用 Blaze 实现这一目标?是否有任何内置函数或助手?

【问题讨论】:

【参考方案1】:

我会创建一个助手来将您的数据分成数组数组:

// Helper:
Template.templateName.helpers(
  getItemsInGroupsOfThree( array ) 
    var result = [];
    var currentResultIndex = 0;
    for( var i = 0; i < array.length; i++ ) 
      if( i % 3 === 0 ) 
        if( i !== 0 ) currentResultIndex++;
        result.push( items: [ array[i] ] );
       else 
        result[ currentResultIndex ].items.push( array[i] );
      
    
    return result;
  
);

//Template:
#each itemGroup in getItemsInGroupsOfThree items
  <div class="row">
    #each item in itemGroup.items
      <div class="col-md-4>
        ItemHere
      </div>
    /each
  </div>
/each

帮助程序创建一个数组数组,每个数组中最多包含三个项目。您基本上是使用创建的组来添加每一行,然后组中的项目创建列和输出值。

希望这会有所帮助!

【讨论】:

【参考方案2】:

您可以对项目进行分组

//helper
Handlebars.registerHelper('grouping_by', function(groupSize, source, options) 
    var out = "", subcont = [], i;
    if (source && source.length > 0) 
      for (i = 0; i < source.length; i++) 
        if (i > 0 && i % groupSize === 0) 
          out += options.fn(subcont);
          subcont = [];
        
        subcont.push(source[i]);
      
      out += options.fn(subcont);
    
    return out;
  );

//template
<div class="container">
  #grouping_by 3 items
  <div class="row">
    #each this 
     item   
    /each
  </div>
  /grouping_by
</div>

这种方法让您可以选择组大小,以便您可以通过模板重复使用。

【讨论】:

以上是关于Meteor & Handlebars:每 N 项后的新行的主要内容,如果未能解决你的问题,请参考以下文章

在 Meteor 的 Handlebars 模板中格式化日期

在 Meteor Handlebars 括号 timestamp 中格式化日期

在 Meteor 中的字符串数组上使用 Handlebars #each 进行迭代

如何在 Handlebars 模板中添加 console.log() JavaScript 逻辑?

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

Meteor中的翡翠模板