2013-03-01 10 views
18
// Snippet from Template 
<div class="post-container"> 
    {{#each elements}} 
    {{> post-element this}} 
    {{/each}} 
</div> 

// Snippet from Client 
Meteor.subscribe('thePosts'); 

// Snippet from Server 
Meteor.publish('thePosts', function(){ 
    return Posts.find({}, {sort:{createdAt:-1}, reactive:true}); 
}); 

Kiedy zrobić ...Meteor Subskrybuj nie aktualizuje porządek zbierania

Posts.insert({body:postBody, createdAt: new Date()}); 

Dokument Post zostanie dodana i pojawia się na końcu mojej listy, w przeciwieństwie do porządku malejącym, jak określono w mojej funkcji publikowania. Jakieś pojęcie o tym, co robię źle?

Dzięki!

Odpowiedz

46

Publish funkcja określa, jakie zapisy powinny być synchronizowane z bazą danych mini-Mongo którejkolwiek subskrybowanie klientów. Sortowanie danych w funkcji publikowania nie ma wpływu na klienta, ponieważ baza danych po stronie klienta prawdopodobnie będzie je przechowywać w inny sposób.

Oczywiście możesz chcieć użyć sortowania w wydawcy find, aby ograniczyć liczbę rekordów do najnowszego N - ale to tylko sposób na to, które rekordy zostaną zsynchronizowane, a nie w jaki sposób mają być przechowywane/używane przez klienta.

Po zsynchronizowaniu rekordów z klientem, należy określić kod szablonu, aby określić sposób wyświetlania wyników. Na przykład:

Template.myTemplate.elements = function() { 
    return Posts.find({}, {sort: {createdAt:-1}}); 
} 

również zobaczyć „posortowane” publikuje fragment mojego postu na common mistakes.

+1

David, to jest naprawdę pytanie, na które czekałem! Doskonała odpowiedź, dziękuję bardzo! – erichrusch

+0

+1 za miłe wyjaśnienie –

+0

Wielkie dzięki! Właśnie uratowałeś mnie mnóstwo czasu :-) – ant45de

4

Nie opublikowałeś swojego kodu pomocniczego szablonu.

Kiedy robisz return Posts.find() z funkcji pomocnika, zapytanie powinno zawierać argumenty rodzaju, jak poniżej:

Template.myTemplate.elements = function(){ 
    Meteor.subscribe('thePosts'); 
    return Posts.find({}, {sort:{createdAt:-1}, reactive:true}); 
} 
+0

Funkcje szablonów działają w kontekście reaktywnym, więc "reaktywny: true" nie jest potrzebny. –

+0

Tak, myślałem, że to domyślne, po prostu mylę się z różnymi rozwiązaniami. – erichrusch

+0

Sohel, byłaś poprawna funkcja pomocnika powinna robić filtrowanie. Publikacja przesyła dokument zsynchronizowany do przeglądarki. Teraz rozumiem, co się tutaj dzieje, dzięki chłopaki! – erichrusch