javascript – 使用Meteor中的#each在动态数据中填充Bootstrap网格

首先感谢您的帮助并原谅我的婴儿Meteor和Bootstrap技能.我对 here提出的问题提出了类似的问题,该问题产生了一些建议但没有解决方案.我想使用#each在Meteor模板中使用来自MongoDB的数据填充BootStrap网格.由于BootStrap网格有12列,我想每行显示4个’单元’,我相信我需要 –

>使用创建一行.
>输出…元素内的四个数据元素…
>用’关闭’row div’.
>使用…创建下一行
>从步骤2中冲洗并重复.

使用从{{#each …}}块返回数据/集合中的数据来执行步骤2.

我的流星模板看起来像这样(我从优秀的’发现流星’一书中扩展了一个例子) –

<template name="postsList"> 
<div class="posts">
   <div class='row-fluid' style="margin-left:1%">
      {{breakInit}}
      {{#each posts}}
         <div class="span3">
           {{> postItem}}
         </div>
         {{breakNow}}
      {{/each}}
   </div>
</div> 
</template>

助手的JavaScript看起来像这样 –

Template.postsList.breakInit = function() {
Template.postsList.docCount = 0 ;
};

Template.postsList.breakNow = function() {
count=Template.postsList.docCount + 1 ;
result="";
if ( count == 4 ) {
    count = 0 ;
    Template.postsList.docCount = count ;
    result="</div><div class=row>" ;
};
Template.postsList.docCount = count ;
return new Handlebars.SafeString(result);
};

这一切似乎都有效,至少在计算#each输出的元素方面,返回< / div>< div class = row>开始一个新行并重置计数器…但是…返回的HTML结束当前行并开始下一行似乎不是由我期望的Boo​​tstrap(或Meteor或我的浏览器)处理的.它似乎重新排序为< div class = row>< / div>.从FireFox中的Inspector看到这个屏幕上限(代码输出6个元素,第一行4个,第二个2个) –

<div id="main" class="row-fluid">
  <div class="posts">
    <div class="row">
      <div class="span3"> … </div>
      <div class="span3"> … </div>
      <div class="span3"> … </div>
      <div class="span3"> … </div>
      <div class="row"> … </div>  <-- The problem...
      <div class="span3"> … </div>
      <div class="span3"> … </div>
    </div>
  </div>
</div>

请注意< div class = row> …< / div>在跨度的中间?看起来不对,它应该关闭一个’行’DIV并开始下一个.任何人都可以建议修复我的代码或使用Meteor中的动态数据弹出网格的替代方法吗?

解决方法

您可以在呈现数据之前对其进行分组:
Template.projectList.helpers({
    projects: function () {
        all = Projects.find({}).fetch();
        chunks = [];
        size = 4;
        while (all.length > size) {
            chunks.push({ row: all.slice(0,size)});
            all = all.slice(size);
        }
        chunks.push({row: all});
        return chunks;
    }
});

<template name="projectList">
  {{#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>

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...