在解析之前更改Meteor.Collection

时间:2013-04-14 18:23:03

标签: javascript html mongodb collections meteor

我有以下问题: 我正从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>

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

1 个答案:

答案 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;
}