Dies ist eine neue Version meiner alten question:Meteor: Wie Rerun von Helferfunktion nach collectionHandle.ready auszulösen() wahr ist
So dank Tom Coleman Hilfe ich endlich herausgefunden, wie man richtig, wenn ein prüfen, Abonnement ist bereit() oder nicht.
Meine aktuellen Code-Struktur sieht wie folgt 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 Ansicht spezifische Js und .html-Dateien für die ganze Vorlage Sachen 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 Helfer dataLoaded
wickelt im Prinzip alles in die entsprechende Vorlage ein und zeigt den Inhalt, wenn dataLoaded
den Wert true zurückgibt oder einen Lade-Spinner zeigt.
Problem ist, dass dies in vielen Fällen nicht funktioniert, da dieser DataLoaded-Code nur einmal ausgeführt wird. Wenn also 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 Datei app.js (die Deps.autorun() Sachen), aber das Protokoll "Alle Daten geladen!" ist nie echod.
Also meine Frage ist: Wie trigger ich eine Wiederholung dieses Codes, so dataLoaded
wird wieder ausgeführt, so dass Inhalte schließlich angezeigt werden?
freundlichen Grüßen
Wo hosten Sie die App? –
für jetzt localhost. Warum fragst du? –
Weil Heroku in Chrome für mich etwas komisch war. –