【问题标题】:Handlebars.js and Bootstrap grid - wrap columns in rowHandlebars.js 和 Bootstrap 网格 - 将列换行
【发布时间】:2015-01-06 00:12:41
【问题描述】:

我相信我需要一个自定义 Handlebars.js 块助手来处理基于 Bootstrap 的网格系统中的行。我希望每 3 件物品用 <div class="row"></div> 包裹起来

期望的输出

<div class="row">
    <div class="col-sm-4">...</div>
    <div class="col-sm-4">...</div>
    <div class="col-sm-4">...</div>
</div>

模板:

{{#employees}}
  <div class="col-sm-4">
    <strong>{{name}}</strong><br>
    {{title}}<br>
    {{skills}}
  </div>
{{/employees}}

数据

var data = {
  "employees" : [
    {
      "name":"Fred Flintstone",
      "title":"Frontend Developer",
      "skills" : "html,css,javascript"
    },
    {
      "name":"Sally Struthers",
      "title":"Frontend Developer",
      "skills" : "html,css,javascript"
    },
    {
      "name":"Ben Wilson",
      "title":"Frontend Developer",
      "skills" : "html,css,javascript"
    },
    {
      "name":"Julie Milson",
      "title":"Frontend Developer",
      "skills" : "html,css,javascript"
    },
    {
      "name":"Mike Barton",
      "title":"Frontend Developer",
      "skills" : "html,css,javascript"
    }
  ]
}

助手概念

这是我的想法,但需要帮助:)

// pass data and how many per row
Handlebars.registerHelper('gridWrap', function(data,perRow) {

  var wrapper = "";

    // need index
    if(index == 0 || index % perRow == 0) {
        wrapper += '<div class="row">';
    }

    if((index + 1) % perRow == 0 || (index + 1) == data.length) {
        wrapper += '</div>';
    }

        return wrapper;


});

如何使用??

那么一旦构建了 helper,你将如何在 html 中使用它?

{{#employees}}

    {{#gridWrap employees 3}} {{wrapper}} {{/gridWrap}}

      <div class="col-sm-4">
        <strong>{{name}}</strong><br>
        {{title}}<br>
        {{skills}}
      </div>

    {{#gridWrap employees 3}} {{wrapper}} {{/gridWrap}}

{{/employees}}

代码示例@Codepen

Here's a link to a Codepen

【问题讨论】:

    标签: javascript twitter-bootstrap twitter-bootstrap-3 handlebars.js


    【解决方案1】:

    引导列在 12 列之后自动换行。问题是我们丢失了行的底部边距。

    虽然您提供的答案可能有效,但它非常复杂。

    另一种更简单的解决方案是为列添加底部边距。

    【讨论】:

      【解决方案2】:

      好的 :) 找到了答案here in this killer post

      这个助手正是我想要的。这是我最终得到的结果:)

      助手

      Handlebars.registerHelper('grouped_each', function(every, context, options) {
          var out = "", subcontext = [], i;
          if (context && context.length > 0) {
              for (i = 0; i < context.length; i++) {
                  if (i > 0 && i % every === 0) {
                      out += options.fn(subcontext);
                      subcontext = [];
                  }
                  subcontext.push(context[i]);
              }
              out += options.fn(subcontext);
          }
          return out;
      });
      

      模板

      {{#grouped_each 3 employees}}
        <div class="row">
          {{#each this }}
            <div class="col-sm-4 item">
              <strong>{{name}}</strong><br>
              {{title}}<br>
              {{skills}}
            </div>
          {{/each}}
        </div>
      {{/grouped_each}}
      

      【讨论】:

      • 我们如何找到行内项目的索引?
      猜你喜欢
      • 2013-04-15
      • 1970-01-01
      • 2020-12-05
      • 1970-01-01
      • 2014-05-16
      • 2018-11-15
      • 2019-01-17
      • 1970-01-01
      • 2015-06-28
      相关资源
      最近更新 更多