我有以下问题: 我正从Mongo数据库中检索Meteor Collection。此Collection应通过内置的handlebar.js解析为HTML。在此之前,我想要更改Collection中的值而不将其保存到db,或者在不保存的情况下向Collection添加新值。
这是因为插入的数据取决于在运行时完成的计算。
我试过以下:
var topics = Topic.find({}, {sort: {votes: -1}});
var totalUsers = Meteor.users.find({}).count();
topics.forEach(function(topic){
var numberOfGoodVotes = topic.votes.goodVotes.length;
var numberOfBadVotes = topic.votes.badVotes.length;
topic.pctGood = (numberOfGoodVotes*(100/totalUsers));
topic.pctBad = (numberOfBadVotes*(100/totalUsers));
topic.pctRest = 100 - topic.pctGood - topic.pctBad;
});
不幸的是,pctGood / Bad / Rest都是0,这是不可能的。在这种情况下,pctGood / Bad / Rest是我的Collection中的存储,其值为0.这就是为什么我假设它在计算后没有改变。
我的HTML看起来像这样:
<div style="width: {{pctGood}}%;">{{pctGood}}%</div>
<div style="width: {{pctRest}}%;">{{pctRest}}%</div>
<div style="width: {{pctBad}}%;">{{pctBad}}%</div>
希望任何人都可以提供帮助:)
答案 0 :(得分:1)
找到了一个有效的解决方案只需在变换选项中添加一个函数。
var topics = Topic.find({}, {sort: {votes: -1}, transform: YOURFUNCTIONGOESHERE});
var YOURFUNCTIONGOESHERE = function(topic){
var totalUsers = Meteor.users.find({}).count();
var numberOfGoodVotes = topic.votes.goodVotes.length;
var numberOfBadVotes = topic.votes.badVotes.length;
topic.pctGood = (numberOfGoodVotes*(100/totalUsers));
topic.pctBad = (numberOfBadVotes*(100/totalUsers));
topic.pctRest = 100 - topic.pctGood - topic.pctBad;
return topic;
}