【问题标题】:Handlebars each from a custom start point每个车把都从自定义起点开始
【发布时间】:2015-09-12 00:55:36
【问题描述】:

假设我有一个对象,

      {
        "empID": "1002729041",
        "empName": "ABHIJIT AUDHYA"
      },
      {
        "empID": "1004563331",
        "empName": "ABDUL MULLA"
      },
      {
        "empID": "1004703190",
        "empName": "ABDUL RAZIC"
      },
      {
        "empID": "1004912437",
        "empName": "ABDUL HAFEEZ"
      }  

我可以使用把手来遍历整个对象,

{{#each myObj}}
  <li>{{empName}}</li>
{{/each}}  

说,我想从第三个对象开始,忽略第一个和第二个。有没有一种简单的方法可以实现这一目标?

【问题讨论】:

  • json 数组是有序的
  • 哦!我忘了提到它是一个JSON 数组。我不确定它是否会按排序顺序排列。我认为不会。
  • 嘿,如果你喜欢我会添加答案
  • 在帮助代码中,您正在使用我的数据静态检查条件。如果对象不同,它将不起作用。无论如何,我感谢你的帮助。谢谢。

标签: javascript jquery loops handlebars.js each


【解决方案1】:

不,您需要一个帮手: Logical operator in a handlebars.js {{#if}} conditional

所以你可以做类似if index &gt; 2 then show content的事情。

如果我可能会问:为什么不在调用模板之前在实际的 javascript 中删除前两个(或就此而言:任何不需要的元素)?

编辑:你在这里...

Handlebars.registerHelper('eachFrom', function(context, count, options) {
    var ret = "";
    
    context.slice(count).forEach(function(elem) {
        ret += options.fn(elem);
    });
    
    return ret;
});

var context = {
    myObj: [{
        "empID": "1002729041",
            "empName": "ABHIJIT AUDHYA"
    }, {
        "empID": "1004563331",
            "empName": "ABDUL MULLA"
    }, {
        "empID": "1004703190",
            "empName": "ABDUL RAZIC"
    }, {
        "empID": "1004912437",
            "empName": "ABDUL HAFEEZ"
    }]
};

var source = $("#entry-template").html();
var template = Handlebars.compile(source);
$("#container").append(template(context));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://cdn.jsdelivr.net/handlebarsjs/3.0.3/handlebars.min.js"></script>

<script id="entry-template" type="text/x-handlebars-template">
    <ul>
        {{#eachFrom myObj 3}}
          <li>{{empName}}</li>
        {{/eachFrom}}
    </ul>
</script>
<div id="container"></div>

【讨论】:

  • 我有十个列表项,其中应该只显示两个。我有一个see more 按钮。单击see more 时,我应该在单独的弹出窗口中显示剩余的列表项。我可以使用JS 来做到这一点,但我很想知道这在车把中是否可行。这对我来说似乎很直接。遗憾的是默认情况下它不存在。我不需要在 if 条件下显示它。我在问我是否可以立即从第三个对象显示它而没有任何 if 块?有帮手吗?
  • 一个简单的array.slice() 可以解决这个问题...添加到我的答案中。
  • 这看起来像是一个更动态的解决方案。我接受它。希望无论我的数据如何,这都能正常工作。
  • 嗯,它需要是一个数组(或调用 slice 后返回数组的对象;)),这样才有效!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多