在Handlebars / Blaze #each循环中访问集合索引

时间:2012-04-12 10:35:11

标签: html meteor meteor-blaze

我正在搞乱Meteor Leaderboard的例子。假设我想在把手#each循环中显示项目的索引:

{{#each players}}
  {{> player}}
{{/each}}

<template name="player">
  <div class="player {{selected}}">
    <span class="index">{{index}}</span>
    <span class="name">{{name}}</span>
    <span class="score">{{score}}</span>
  </div>
</template>

通常人们会为此编写一个把手助手,但是我无法弄清楚如何使用Meteor集合。

怎么会这样做?谢谢。

4 个答案:

答案 0 :(得分:3)

Blaze现在有一个@index功能:

{{#each players}}
  {{> player index=@index}}
{{/each}}

<template name="player">
  <div class="player {{selected}}">
    <span class="index">{{index}}</span>
    <span class="name">{{name}}</span>
    <span class="score">{{score}}</span>
  </div>
</template>

Template.player.helpers({
  index() {
    var data = Template.currentData();
    if( data ) {
      return data.index;
    }
  }
});

答案 1 :(得分:0)

如果您只是想显示mongo生成的id,请使用_id

 <span class="id">{{_id}}</span>

它将在集合中显示唯一的索引ID。它不会很漂亮。

我可能误解了你的问题。对不起,如果我做了。

答案 2 :(得分:0)

为此问题添加答案。我不得不花几个小时搞清楚

在您的客户

Template.player.data = function(data){

if(type){

return Template[ 'player' ](data);

}

}

在您的模板中

{{#each players}}

{{data this}}

{{/each}}

这将无缝地工作。

答案 3 :(得分:0)

通过使用Mongo通常会创建值增加的索引这一事实,我解决了这个问题 - 不是一个完美的解决方案。

Template.item.index = function() {
    return Items.find().count() - Items.find({_id: {$lte: this._id}}).count() + 1
}

然后我在模板中使用它,如下所示:     {{索引}}

希望这有帮助!