【问题标题】:Print the loop index in Meteor.js templates [duplicate]在 Meteor.js 模板中打印循环索引 [重复]
【发布时间】:2014-04-04 05:53:31
【问题描述】:

我在meteorjs中有一个对象列表,我在meteorjs模板中迭代,比如

{{#each objects}}
{{/each}}

在模板中我想打印循环迭代的次数。也就是说,如果对象列表的长度是 100,我想在模板中打印从 1 到 100 的数字。我该怎么做?

【问题讨论】:

  • objects 是数组、游标还是对象?
  • 它是一个对象数组
  • 目前所有答案都是正确的,但是在编辑1行的情况下,它会触发所有行的渲染,效率非常低。

标签: javascript meteor handlebars.js


【解决方案1】:

如果不在助手中提供索引,您目前无法执行此操作,即

Template.yourtemplatename.object_with_index = function() {
    var objects = Template.yourtemplatename.objects();

    for(var i = 0; i=objects.length; i++) {
        objects[i].index = i;
    }

    return objects;
}

然后做:

{{#each object_with_index}}
    <p>This is number {{index}}</p>
{{/each}}

不是最漂亮的方式,但其他变体基本上会在引擎盖下做同样的事情(例如,如果你使用 map

【讨论】:

  • 我认为循环中应该是objects[i].index = i;
  • 是的,没错!用那个更新它
  • thanx 伙计,它可以工作,它应该是objects[i].index=i+1,因为索引总是以 1 开头
  • 我认为循环中有错误:for(var i = 0; i=objects.length; i++) 不应该是:for(var i = 0; i &lt; objects.length; i++) 吗?
  • 此代码适用于{{#each each_path_with_index 'objects'}},并已在全球范围内注册。还添加humanIndex 为您提供一个索引为 1 的计数器。 Template.registerHelper('each_path_with_index', function(keyPath) { var objects = _.getPath(this, keyPath); _.each(objects, function(element, i, list) { objects[i].index = i; objects[i].humanIndex = i + 1; }); return objects; });
【解决方案2】:

如果你的对象是一个游标,你可以使用它的map方法:

Template.yourtemplatename.objects = YourCollection.find().map(function(document, index){
    document.index = index;
    return document;
});

【讨论】:

    【解决方案3】:

    我创建了一个全局助手,为数组添加索引:

    UI.registerHelper('addIndex', function(thatArray) {
      if (thatArray && thatArray.length) {
        $.each(thatArray, function (position, thatObject) {
          thatObject.index = position;
          thatArray[position] = thatObject;
        });
        return thatArray;
      }
    });
    

    然后你就这样称呼它:

    {{#each addIndex arrayWithoutIndex}}
      The current value is at this index number : {{index}}
    {{/each}}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      • 2013-03-28
      • 2015-12-29
      • 1970-01-01
      • 2019-02-04
      • 2018-02-04
      相关资源
      最近更新 更多