为Meteor数据创建编号列表

时间:2015-02-20 10:11:42

标签: javascript mongodb meteor

有没有办法获得我在Meteor集合中的项目编号列表的“数字”。我知道我可以在html中完成它,但我觉得如果我可以在{{spacebars}}中放弃一些内容,那么风格会更容易。如果我可以使用更好的术语,请告诉我。这样的事情。

前20部电影列表:

    {{#each movie}}
         Movie #{{number}} {{movie_name}} {{review_score}}
    {{/each}}

3 个答案:

答案 0 :(得分:1)

我没有正确理解你的问题,我也不太了解 Meteor-Collections ,但一般来说,如果你遍历一个数组并希望得到每个元素的索引,你可以通过以下方式轻松完成:

[1,2,3].forEach(function(e,i){ console.log(i+":"+e); })

 0:1
 1:2
 2:3

请参阅MDN了解forEach()

答案 1 :(得分:1)

pull request 可以完全符合您的要求:

{{#each movie}}
   {{@index}}{{movie}}
{{/each}}

在他们合并之前,您可以使用其他方法:

How can I get the index of an array in a Meteor template each loop?

答案 2 :(得分:1)

使用Underscore.js中的“地图”尝试。

我希望你的“电影”系列中有电影,它们看起来像这样:

{
    title: "Shawshank Redemption",
    score: 92
},
{
    title: "Forrest Gump",
    score: 96
},
{
    title: "Green Mile",
    score: 91
},
{
    title: "The Godfather",
    score: 95
}

......等等......

这是“yourTemplate”辅助函数:

Template.yourTemplate.helpers({
    movie: function () {
        var loadMovies = Movie.find({}, {sort: {score: -1}, limit: 20}).fetch(); // added descending sorting by review score
        var array = _.map(loadMovies, function(movie, index) {
            return {
                    number: index+1, // incrementing by 1 so you won't get 0 at the start of the list
                    movie_name: movie.title,
                    review_score: movie.score
                   };
        });
        return array;
    }
});

现在您可以在模板中使用它,如下所示:

<template name="yourTemplate">
    {{#each movie}}
         Movie #{{number}} {{movie_name}} {{review_score}}
    {{/each}}
</template>