Jestem nowy w Meteor, więc bawiłem się i teraz utknąłem z tym problemem.findOne rzucanie niezdefiniowane, mimo że dane tam są
Używam React Router, aby spróbować pokazać motyw oparty na URL/(: userId). Jeśli w adresie URL nie ma identyfikatora użytkownika, powinien on wskazywać bieżący motyw użytkownika, a jeśli nie ma bieżącego użytkownika, powinien pokazać domyślny motyw.
Działa to losowo. Czasami otrzymuję poprawną kompozycję, czasami jest ona niezdefiniowana podczas czytania elementu themeColor, mimo że dane tam są. Widzę z console.log, że zawsze otrzymuje on właściwy identyfikator, ale wciąż findOne może wyrzucać niezdefiniowane. Dzieje się tak szczególnie, gdy zmieniam adres URL (/ xyz) i wracam do domyślnego (/).
Zweryfikowałem za pomocą konsoli, że userId jest faktycznym właścicielem themeColor i themeTextColor.
Używam React, React-router, autopublish. Usunąłem niepewność.
getMeteorData() {
var currentViewedPageId = this.props.params.userId? this.props.params.userId:(Meteor.userId()?Meteor.userId():false);
console.log(currentViewedPageId); //Allways right
console.log(Personalization.findOne({owner: currentViewedPageId}).themeColor); //Sometimes undefined, sometimes not
if(currentViewedPageId)
{
return {
currentUser: Meteor.user(),
themeColor: Personalization.findOne({owner: currentViewedPageId}).themeColor,
themeTextColor: Personalization.findOne({owner: currentViewedPageId}).themeTextColor
};
}
return {
currentUser: Meteor.user()
}
},
Gdzie subskrybujesz te dane? Chyba musisz poczekać, aż subskrypcja będzie gotowa. –
Na razie używam autopublish. – hiei
Autopublish po prostu publikuje wszystkie dane, ale nie czeka na nie. Usuń autopublish i użyj opcji publikowania/subskrypcji. Najlepsza opcja to routing z wbudowanymi opcjami oczekiwania i subskrypcji, takimi jak: [flow-router] (https://github.com/VeliovGroup/flow-router) lub [iron-router] (https://github.com/iron -meteor/iron-router) –