2013-05-17 71 views
24

在流星模板輔助函數中,如果我返回findfetch的結果,在性能,重新渲染數量或其他任何方面是否有區別?流星使用獲取或找到模板幫助函數?

例如,發現方法:

Template.players.topScorers = function() { 
    return Users.find({score: {$gt: 100}}, {sort: {score: -1}}); 
}; 

或添加抓取:

Template.players.topScorers = function() { 
    return Users.find({score: {$gt: 100}}, {sort: {score: -1}}).fetch(); 
}; 

這一發現,唯一的方法是什麼是目前在docs,但我見過很多的其他人使用fetch

回答

46

是的。

通過使用fetch,您可以當場註冊對整個查詢結果集的依賴關係。通過使用find及以後的迭代使用{{#each}},依賴性被分別註冊在每個文檔上。所以當一個文件改變時,只有相關的代碼被重新渲染。使用fetch時,更改結果集中的任何文檔將重新渲染您使用的整個範圍fetch

對於小的結果集,它沒有任何區別。對於頻繁更改的較大集合,它可能會減慢計算速度並導致不希望的視覺僞影。

我寫了一個post它可以幫助你理解它(它不直接但回答你的問題)

0

這是我們按照巴菲特真技術。

爲了定義幫手就到你的模板的js文件,例如,如果你有一個模板名稱作爲allInventory所以只是去allInventory.js文件並寫入助手如下: -

Template.allInventory.helpers({ 

}) 

使得函數這個助手在你把你的邏輯從數據庫或會話或其他服務,比讓數據使用,在裏面你的HTML,如: -

Template.allInventory.helpers({ 
     productDetails: function() { 
       return Session.get('dbData'); 
     } 
    }) 

On html side you just need to use the function name as follows:- 

{{#each productInfo in productDetails}} 

     <div class="imgb"><img src="{{productInfo.image_url}}"></div> 
      {{productInfo.item_name}} 
      {{productInfo.seller_sku}} 
      {{productInfo.quantity}} 
      {{productInfo.price}} 

<a type="button" class="full-view text-success"><i id="fullView" data="{{productInfo._id}}" class="fa fa-eye"></i></a> 

      {{/each}} 

正如你可以在上面的產品詳細看到你的助手函數名你獲得數據的類你想在你的Html上渲染,可以直接通過該名稱訪問,並且可以通過html模板中的每個循環遍歷。

相關問題