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