2013-05-17 18 views
24

Wewnątrz funkcji pomocnika szablonów meteorytów, czy istnieje jakaś różnica w wydajności, liczbie ponownych renderowań lub cokolwiek innego, jeśli zwrócę wynik find vs fetch?Używanie meteorów do pobierania lub znajdowania w funkcjach pomocnika szablonów?

Na przykład podejście znalezisko:

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

lub dodanie pobrać:

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

Podejście znaleźć tylko to, co jest obecnie w docs, ale widziałem wiele inne osoby używające fetch.

Odpowiedz

46

Tak, jest.

Za pomocą pobierania rejestrujesz zależność od całego zestawu wyników zapytania ustawionego na miejscu. Przy użyciu find i późniejszej iteracji przy użyciu {{#each}} zależność jest rejestrowana dla każdego dokumentu osobno. Więc kiedy jeden dokument się zmienia, tylko odpowiedni kod jest ponownie renderowany. Podczas korzystania z fetch zmiana dowolnego dokumentu w zestawie wynikowym spowoduje ponowne renderowanie całego zakresu, w którym był używany fetch.

Dla małych zestawów wyników nie ma to znaczenia. W przypadku większych zestawów z częstymi zmianami może spowolnić obliczenia i powodować niepożądane artefakty wizualne.

Napisałem post które mogą pomóc go zrozumieć (to nie jest odpowiedź na swoje pytanie bezpośrednio chociaż)

0

To właśnie podążać oodles Technologies.

Definiowanie pomocnika po prostu pójść do pliku szablonu js na przykład, jeśli masz nazwę szablonu jako allInventory tak po prostu pójść do allInventory.js pliku i napisać pomocnika w następujący sposób: -

Template.allInventory.helpers({ 

}) 

utworzyć funkcję wewnątrz tego pomocnika, w którym można umieścić swoją logikę do pobierania danych z bazy danych lub sesji lub z innych usług i nie używać, że w ty html, takich jak: -

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

jak widać w powyższych informacje szczegółowe nazwy funkcji w swoim pomocnikiem klasa, na której otrzymujesz dane chcesz renderować na swoim html jest dostępny bezpośrednio za pośrednictwem tej nazwy i można przejść to za pośrednictwem każdej pętli w szablonach html.

Powiązane problemy