【问题标题】:Accessing collection index in Handlebars/Blaze #each loop在 Handlebars/Blaze #each 循环中访问集合索引
【发布时间】:2012-04-24 16:45:45
【问题描述】:

我在搞乱流星排行榜的例子。假设我想在把手#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 集合一起使用。

如何做到这一点?谢谢。

【问题讨论】:

  • 您是否真的尝试过车把辅助方法? This snippet 为我工作。
  • @zwip 非常感谢。我试过了,但使用了不同的助手。

标签: html meteor meteor-blaze


【解决方案1】:

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

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

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

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

【讨论】:

  • 刚刚找到这个!我想要索引,所以它会在播放器旁边显示 0、1、2 等。基本上是玩家在集合中的位置。
【解决方案2】:

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

在您的客户中

Template.player.data = function(data){

if(type){

return Template[ 'player' ](data);

}

}

在您的模板中

{{#each players}}

{{data this}}

{{/each}}

这将无缝运行。

【讨论】:

  • 我收到一个类型未定义的错误,在您的示例中它代表什么?
【解决方案3】:

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

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

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

希望这会有所帮助!

【讨论】:

    【解决方案4】:

    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;
        }
      }
    });
    

    【讨论】:

      猜你喜欢
      • 2012-08-31
      • 2012-11-21
      • 2012-09-27
      • 2013-02-15
      • 2014-10-29
      • 1970-01-01
      • 2013-11-16
      • 1970-01-01
      相关资源
      最近更新 更多