使用自己的数据更新Meteor Leaderboard

时间:2013-08-23 20:12:12

标签: javascript mongodb meteor

我已将流星示例排行榜更改为投票应用。我有一些带有数组的文档,在这个数组中有6个值。这6个值的总和可以正常工作,但不能更新并显示我的应用程序中的值。

如果点击它们,值只会更新。问题是,我从“selected_books”变量(之前的selected_players)获得了书名(它是书籍的投票应用程序),但我不知道如何获得书名。

顺便说一句:_id是书的名字。 我会给你一些代码片段和希望,有人有解决方案。

这是我的数据库中的文档:

{
    _id: "A Dance With Dragons: Part 1",
    isbn: 9780007466061,
    flag: 20130901,
    score20130714: [1,2,3,4,5,0],
}

我的html文件的一部分:

<template name="voting">
    ...
    <div class="span5">
        {{#each books}}
            {{> book}}
        {{/each}}
    </div>
    ...
</template> 

<template name="book">
    <div class="book {{selected}}">
        <span class="name">{{_id}}</span>
        <span class="totalscore">{{totalscore}}</span>
    </div>
</template>

以及我的Javascript文件的一部分:

Template.voting.books = function () {
    var total = 0;
    var book = Session.get("selected_book");

    Books.find({_id:book}).map(function(doc) {
        for (i=0; i<6; i++) {
            total += parseInt(doc.score20130714[i], 10);
        }
    });
    Books.update({_id:book}, {$set: {totalscore: total}});

    return Books.find({flag: 20130901}, {sort: {totalscore: -1, _id: 1}});
};

提前致谢

1 个答案:

答案 0 :(得分:0)

不要更新帮助程序中的数据!使用第二个帮助程序来聚合信息,或使用转换来修改数据项。例如:

Template.voting.books = function() {
    return Books.find({}, {sort: {totalscore: -1, _id: 1}});
};

Template.books.totalscore = function() {
    var total = 0;
    for(var i=0; i<6; i++) {
        total += this.score[i];
    }
    return total;
};

作为旁注,不要使用构造for (i=0; i<6; i++),这是致命的。 始终声明您的索引变量:for (var i=0; i<6; i++)