Callback, gdy wszystkie elementy szablonu zakończyły renderowanie w Meteor?

Dostaję kolekcję rekordów i umieszczam je w szablonie, po czym je renderuję{{#each}} i chcę wyświetlić ikonę ładowania, dopóki nie zostanie wyrenderowany ostatni węzeł DOM.

Moim problemem jest to, że nie znalazłem sposobu na zapytanie o stan / ogień wywołania zwrotnego ostatniego elementu renderowanego jako ostatni węzeł DOM do zaktualizowania / ponownego narysowania.

Wygląda to trochę tak w moim pliku HTML:

<template name="stuff">
    {{#each items}}
        <div class="coolView">{{cool_stuff}}</div>
    {{/each}}
</template>

A w pliku JS po stronie klienta:

// returns all records of Stuff belonging to the currently logged-in user
Template.stuff.items = function () {
    Session.set('loading_stuff', true);
    return Items.find({owner: Meteor.userId()}, {sort: {created_time: -1}});
};

Template.stuff.rendered = function() {
    // every time something new is rendered, there will have been loading of the DOM. 
    // wait a short while after the last render to clear any loading indication.
    Session.set('loading_stuff', true);
    Meteor.setTimeout(function() {Session.set('loading_stuff', false);}, 300);
};

Zmienna Sessionloading_stuff jest pytany w pomocniku kierownicy, zwracając nazwę klasy ładowania (z ikoną ładowarki GIF), jeśli jesttrue.

Powód, dla którego robię to niezręcznieMeteor.setTimeout jest ponieważTemplate.rendered jest nazywanypo każdym pojedynczym przedmiocie który został renderowany w szablonie. Muszę więc ponownie potwierdzić, że wciąż się ładuje, ale daj mu trochę czasu, aby załadować następny lub zakończyć renderowanie wszystkich, z małą przerwą, aż do ustawienialoading_stuff dofalse.

Jak niezawodnie odpytywać / oddzwonić na końcu wszystkich aktualizacji DOM (dla konkretnego szablonu lub całej strony) właściwego sposobu Meteoru?

Wielkie dzięki.

EDYTOWAĆ

Rozwiązanie z wykorzystaniemsubscribe() onReady() wywołanie zwrotne działa tylko częściowo:

Szablony wydają się być nazywane wielokrotnymi (2-3) razy, zanim renderowanie nawet się rozpocznie, alepo dane wróciły z serwera, na którym opiera się szablon do renderowania. Oznacza to, że jest to „zakończone” ładowanie danych, ale DOM jest nadal renderowany. Będę się bawićMeteor.autorun() i zobacz, czy mogę znaleźć solidny hak, aby zrobić to poprawnie. Tymczasem myślę, że moje pierwotne pytanie wciąż pozostaje:

Skąd mam wiedzieć, kiedy cały szablon / strona zakończył renderowanie?

EDYCJA KOŃCOWA:

Pod koniec dnia, w oparciu o strukturę DOM, zależy od dewelopera solidnego modelu DOM i dołączenia odpowiednich wywołań zwrotnych jak najlepiej do elementów, które chce sprawdzić. Może się wydawać, że jest to anty-klimatyczny pomysł, ale dla mnie jedynym sposobem na poznanie końcowego elementu szablonu jest wyświetlenie elementu ze specjalnym identyfikatorem na samym końcu szablonu, który sygnalizuje koniec renderowanie i dołączenie.livequery oddzwonić do niego. Mam nadzieję, że Meteor wprowadzi bardziej zunifikowane i globalne wsparcie do sprawdzania tego stanu w przyszłości.

questionAnswers(7)

yourAnswerToTheQuestion