2013-04-14 54 views
1

我遇到以下問題: 我從Mongo數據庫檢索Meteor Collection。該集合應通過內置的handlebar.js解析爲HTML。在此之前,我想要更改Collection中的值而不將其保存到數據庫中,或者將新值添加到Collection中而不保存它。在解析之前更改Meteor.Collection

這是因爲插入的數據取決於在運行時完成的計算。

我試過TE如下:

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 /壞/剩下的全是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

備註:'numberOfGoodVotes'和'numberOfBadVotes'應該在該匿名函數內。現在他們是全局變量。它們的範圍如'var numberOfGoodVotes = ...'和'var numberOfBadVotes = ...'。 –

+0

Thx,編輯此。不幸的是,這並不能解決問題 – ToBHo

回答

1

找到一個可行的解決方案。只需將一個函數添加到transform選項。

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