Ta nowa wersja mojego starego question:Meteor: Jak wyzwalać powtórzenie funkcji pomocnika po collectionHandle.ready() jest prawdziwe
Więc dzięki pomocy Toma Colemana w końcu zorientowali się, w jaki sposób sprawdzić, czy prawidłowo subskrypcja jest gotowa() lub nie.
Moja obecna struktura kod wygląda następująco:
/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'));
});
});
// ...
Wtedy muszę zobaczyć specyficzny .js i pliki .html dla wszystkich rzeczy szablonu w folderze o nazwie:
/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;
}
}
Ten helper dataLoaded
zawija w zasadzie wszystko w odpowiednim szablonie i pokazuje zawartość, gdy dataLoaded
zwraca wartość true, lub pokazuje obrót ładujący.
Problem polega na tym, że w wielu przypadkach nie działa to, ponieważ kod dataLoaded jest uruchamiany tylko raz. Jeśli więc oba uchwyty NIE są gotowe() w czasie, gdy uruchamiana jest dataLoaded, zawartość NIGDY nie pojawi się. W tym przypadku nadal widzę wszystkie pliki console.log pochodzące z pliku app.js (rzeczy Deps.autorun()), ale dziennik "Wszystkie dane załadowane!" nigdy nie jest echem.
Moje pytanie brzmi: Jak wywołać ponowne uruchomienie tego kodu, aby ponownie uruchomić dataLoaded
, aby zawartość ostatecznie się wyświetliła?
pozdrawiam
Gdzie prowadzisz aplikację? –
na teraz localhost. Dlaczego pytasz? –
Bo Heroku jest dla mnie trochę dziwaczny w Chrome. –