2015-06-07 40 views
0

我有upvotes和downvotes,他們都在收藏中,並在模板中顯示爲{{upvotes}}{{downvotes}}在流星中使用車把的計算

所以,如果我有一個第三顯示屏,顯示總票數,我應該通過像下面的(不是順便說工作)的輔助做到這一點:

在helper.js:

Template.registerHelper('totalvotes', function(upvotes, downvotes) { 
    var totalvotes = upvotes + downvotes; 
    return totalvotes; 
}); 

在HTML:

{{ totalvotes "Vote"}} 


我記得關於性能的一些事情,並沒有計算客戶端級別的所有字段。在這種情況下,最好在主對象集合中增加一個增量,而不是通過在totalvotes字段中添加,而不是在客戶端中有助手? (包括建議代碼的粗略形式)。謝謝!

例如,在集合(領域):

upvotes: 0 
downvotes: 0 

然後增量邏輯

$inc: {upvotes: 1} 
$inc: {downvotes: 1} 

upvotes: 0 
downvotes: 0 
totalvotes: 0 

$inc: {upvotes: 1} 
$inc: {downvotes: 1} 
$inc: {totalvotes: 1} 

回答

2

你不應該把這個建議太裏這在很大程度上取決於你在做什麼。

對於這種特殊情況,我認爲用客戶端的幫助器(這只是一個額外的調用助手,會做一些非常簡單的處理)與添加額外的非規格化字段數據庫會增加更大的整體開銷(磁盤,內存空間,網絡數據存儲)。


爲你的靈感:

「程序員浪費大量的時間思考,也不必擔心,他們的節目非關鍵部分的速度,而這些嘗試的效率居然有當一個強烈的負面影響調試和維護,我們應該忘記小效率,大約97%的時間:過早優化是萬惡之源,但我們不應該把這個關鍵的3%放在一邊。「 - 唐納德克努特

+0

感謝您的回覆。如果有很多很多的物體需要投票呢?如果按照你的建議行事,我應該如何寫助手作爲它目前不工作。 – Thinkerer

+1

您呼叫的幫手以錯誤的方式: '{{totalvotes 「投票」}}' 應該 '{{totalvotes upvotes downvotes}}' –

+0

(或做什麼@Billybobbonet建議,讓你不需要發送參數給幫手) –

2

我同意@dooart的回答。

關於你的幫手不工作,我建議在pageSession無效變量中存儲upvotes和downvotes(使用reactive-dict)。

這樣,您不必將2個參數傳遞給您的幫手,並且您會得到一個反應性投票計數:您的每個downvotes,upvotes和totalvotes幫助者只會返回相關變量(或總計中的總數)