我正在尝试每行显示3个元素。我的模板如下所示:(已更新)

 <template name="projectList">
   {{breakTimeReset}}
   <div class=row>
  {{#each projects}}

    {{> projectItem}}

        {{#if breakTime}}
        </div>
        <div class=row>
        {{/if}}

   {{/each}}
   </div>
</template>

如您所见,对于数据库中的每个元素,我都输出projectItem。我想输出它们,所以每3个元素都包装在一个

这是我的js助手
Template.projectList.helpers({
    projects: function() {
        return Projects.find();
    },
    breakTimeReset: function() {
        Template.projectList.doCount = 0;
    },
    breakTime: function () {
        count = Template.projectList.doCount + 1;
        console.log(count);
        Template.projectList.doCount = count;

        if (count % 3 == 0) {
            console.log("Started break");
            return true;
        }
        else
            return false;
    }
});

我的问题是如何设置它,以便每行有3个元素,然后知道每3个元素后插入一个新的行div?我目前设置的方式会导致非常时髦的结果,因为它不可靠,因为新的div会在元素之前插入。

在这里查看结果:http://testprojectapp.meteor.com

您会看到第一行显示正常,但之后我得到了一些时髦的结果。而且,如果您通过查看页面源代码 check out DOM,则会发现该代码与我的代码不匹配,这很奇怪。

让我知道这是否是一个令人困惑的问题。谢谢!

最佳答案

您可以在呈现数据之前对数据进行分组:

Template.projectList.helpers({
    projects: function () {
        all = Projects.find({}).fetch();
        chunks = [];
        size = 3
        while (all.length > 3) {
            chunks.push({ row: all.slice(0, 3)});
            all = all.slice(3);
        }
        chunks.push({row: all});
        return chunks;
    },
    breakTimeReset: function () {
        Template.projectList.doCount = 0;
    },
    breakTime: function () {
        count = Template.projectList.doCount + 1;
        console.log(count);
        Template.projectList.doCount = count;

        if (count % 3 == 0)
            return "</div><!-- why? --><div class='row'>"
        else
            return ""
    }
});

<template name="projectList">
  {{breakTimeReset}}
  {{#each projects}}
    {{> projectRow }}
  {{/each}}
</template>

<template name='projectRow'>
  <div class='row span12'>
    {{#each row }}
      {{> projectItem}}
    {{/each}}
  </div>
</template>

<template name="projectItem">
  <div class="span4">
    <h3><a href="{{projectPagePath this}}"> {{title}} </a></h3>
    <p> {{subtitle}} </p>
    <p> {{description}} </p>
    <p><img src="{{image}}"/></p>
    <p> {{openPositions}} </p>
  </div>
</template>

对不起,我错过了很多次,近点!

09-25 13:12