1

我有以下问题:我正在从我的 Mongo 数据库中检索 Meteor Collection。此集合应通过内置的 handlebar.js 解析为 HTML。在此之前,我想要么更改集合中的值而不将其保存到数据库,要么将新值添加到集合而不保存它。

这是因为插入的数据取决于在运行时完成的计算。

我尝试了以下内容:

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>

希望任何人都可以提供帮助:)

4

1 回答 1

1

Found a working solution. Just add a function to the transform option.

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;
}
于 2013-04-15T16:12:55.150 回答