2012-04-12 7 views
3

Ich spiele mit einem Meteor Leaderboard-Beispiel herum. Lassen Sie uns sagen, dass ich den Index eines Elements innerhalb eines Lenkers angezeigt werden wollte #each Schleife:Zugriff auf den Sammlungsindex in Handlebars/Blaze #each loop

{{#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> 

Normalerweise würde man einen Lenker Helfer für dieses schreiben, aber ich habe Probleme, herauszufinden, wie sie mit einer Arbeit zu bekommen Meteor Sammlung.

Wie würde man das machen? Vielen Dank.

+1

Haben Sie wirklich den Lenker Helfer Ansatz versuchen? [Dieses Snippet] (https://gist.github.com/1371586) hat für mich funktioniert. – zwippie

+0

@zwip Vielen Dank. Ich hatte es versucht, aber mit einem anderen Helfer. – kmurph79

Antwort

0

Wenn Sie nur versuchen, die Mongo zu zeigen, erzeugt ID verwenden nur _id

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

Es den eindeutigen Index-ID in der Sammlung zeigen. Es wird nicht schön sein.

Ich habe möglicherweise Ihre Frage missverstanden. Tut mir leid, wenn ich es getan habe.

+0

Gerade gefunden! Ich wollte den Index, also würde es 0,1,2 usw. neben dem Spieler zeigen. Grundsätzlich die Position des Spielers in der Sammlung. – kmurph79

0

Hinzufügen einer Antwort für diese Frage. Ich hatte ein paar Stunden, um es herauszufinden

Template.player.data = function(data){

if(type){

return Template[ 'player' ](data);

}

}

In Ihrem Client

out setzen

in Ihrer Vorlage

{{#each players}}

{{data this}}

{{/each}}

Dies wird nahtlos arbeiten.

+0

Ich bekomme eine Fehlermeldung, dass Typ nicht definiert ist, was bedeutet es hier in Ihrem Beispiel? – Blaise

0

Hier ist, wie ich das gelöst habe - keine perfekte Lösung - mit der Tatsache, dass Mongo in der Regel Indizes erstellt, die im Wert steigen.

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

ich dies dann wie so in der Vorlage verwenden: {{index}}

hoffe, das hilft!

2

Es gibt jetzt ein @index Feature in Blaze:

{{#each players}} 
    {{> player [email protected]}} 
{{/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; 
    } 
    } 
});