Meteor: Wie man nach collectionHandle.ready () die Wiederholung der Hilfsfunktion auslöst, ist wahr

Dies ist eine neue Version meiner altenFrage:

Dank der Hilfe von Tom Coleman habe ich endlich herausgefunden, wie ich richtig prüfen kann, ob ein Abonnement fertig ist () oder nicht.

Meine aktuelle Codestruktur sieht folgendermaßen aus:

/client/app.js:

eventsHandle = null;
groupsHandle = null;
// ...
// First Deps.autorun():
// Does not depend on any Session var, should just run every time
Deps.autorun(function() {
    eventsHandle = Meteor.subscribe("events", function() {
        console.log('Deps.autorun(): Events loaded');
    });
});

// Second Deps.autorun():
// contains all subscriptions which are dependent on my Session var "ehash"
Deps.autorun(function() {
    if(Session.get('ehash'))
        groupsHandle = Meteor.subscribe("groups", Session.get('ehash'), function() {
            console.log('Deps.autorun(): Groups loaded with ehash: ' + Session.get('ehash'));
        });
});
// ...

Dann habe ich spezifische .js- und .html-Dateien für alle Vorlagen in einem Ordner namens:

/client/views/
--> <page>.js:

Template.x.dataLoaded = function() {
    if(Session.get('ehash'))
        if(eventsHandle && groupsHandle && eventsHandle.ready() && groupsHandle.ready()) {
            console.log('All data loaded!');
            singleevent = Events.find({ehash: Session.get('ehash')}).fetch()[0];
            return true;
        } 
}

Dieser HelferdataLoaded packt im Grunde alles in die entsprechende Vorlage und zeigt den Inhalt wann andataLoaded Gibt true zurück oder zeigt einen Ladespinner.

Das Problem ist, dass dies in vielen Fällen nicht funktioniert, da dieser dataLoaded-Code nur einmal ausgeführt wird. Wenn die beiden Handles zum Zeitpunkt der Ausführung von dataLoaded NICHT bereit () sind, wird der Inhalt NIEMALS angezeigt. In diesem Fall sehe ich immer noch alle console.logs aus der app.js-Datei (das Deps.autorun () - Zeug), aber das Protokoll "Alle Daten geladen!" ist nie echod.

Meine Frage lautet also: Wie löse ich so eine Wiederholung dieses Codes aus?dataLoaded Wird es erneut ausgeführt, damit der Inhalt irgendwann angezeigt wird?

freundliche Grüße

Antworten auf die Frage(4)

Ihre Antwort auf die Frage