0

我已将流星示例排行榜更改为投票应用程序。我有一些带有数组的文档,在这个数组中有 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}});
};

提前致谢

4

1 回答 1

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++).

于 2013-08-24T08:47:19.833 回答