Meteor: Jak wyzwolić reRun funkcji helpera po kolekcjiHandle.ready () jest prawdą
To nowa wersja mojego staregopytanie:
Dzięki pomocy Toma Colemana w końcu odkryłem, jak prawidłowo sprawdzić, czy abonament jest gotowy (), czy nie.
Moja obecna struktura kodu 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'));
});
});
// ...
Następnie przeglądam określone pliki .js i .html dla wszystkich elementów 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 pomocnikdataLoaded
owija zasadniczo wszystko w odpowiedni szablon i pokazuje zawartość, kiedydataLoaded
zwraca true lub pokazuje ładowanie spinnera.
Problem polega na tym, że w wielu przypadkach nie działa, ponieważ ten kod dataLoaded jest uruchamiany tylko raz. Jeśli więc oba uchwyty NIE są gotowe () w czasie, gdy dataLoaded jest uruchomiona, 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 załadowane dane!” nigdy nie jest echem.
Więc moje pytanie brzmi: jak mogę uruchomić ponowne uruchomienie tego kodu takdataLoaded
jest uruchamiany ponownie, aby zawartość pojawiła się w końcu?
Z poważaniem