Ich bin mir nicht sicher, ob dies eine Beschränkung auf React und Meteors Verbindung ist, da die Dokumentation vorschlägt, dass es ohne den zusätzlichen Parameter möglich sein sollte.React and Meteor Subscription
Wenn ich eine Meteor-Subskription in react aufruft, wenn ich den Parameter in der Abfrage nicht explizit festlege, gibt sie alle Daten zurück und ignoriert die angegebenen Daten in der Publish-Funktion.
Meteor.publish("supplier", function() {
if(this.userId) {
var user = Meteor.users.findOne(this.userId, { fields : { active : 1 }});
if(user.active != this.userId || user.active != undefined){
// This only returns 1 singular supplier - is correct
var supplier = Supplier.find({ _id : user.active, users : this.userId });
return supplier;
} else {
return this.ready();
}
} else {
return this.ready();
}
});
Jetzt nenne ich das Abonnement in reagieren als so
getMeteorData: function() {
var data = {}
handle = Meteor.subscribe("supplier");
if(handle.ready()) {
data.supplier = Supplier.findOne(); // Returns Wrong supplier
//data.supplier = Supplier.findOne({_id: session.get("active")}) // Returns correct supplier
data.supplierReady = true
}
return data;
},
Dies liefert den ersten Anbieter in der Sammlung des in der veröffentlichen Funktion auf dem Server nicht angemeldet! Wenn ich jedoch { _id : user.active}
übergeben, funktioniert es!
Jetzt war es mein Verständnis, dass durch die Logik auf dem Server innerhalb der publish
Funktion, die ich einfach Supplier.findOne()
verwenden könnte, aber das ist nicht der Fall, und ich verstehe nicht warum. Ist das eine Einschränkung von React/Meteor oder setze ich das falsch um?
Hallo Jeremy. Danke für die informative Antwort. Ich verstehe den Prinzipal jetzt und das Problem ist, dass mehrere Abonnements der Lieferantensammlung existieren müssen (da Sie zwischen Lieferanten wechseln können). Ich bin interessiert, wenn Sie erklären oder erklären könnten, was Sie mit 'Überprüfen Sie den Zustand der Client-Seite Sammlung 'meinen. Sie meinen nur eine Anzahl oder Abfrage, um die Client-Sammlung zu überprüfen? – Allreadyhome
Ja, ich meinte, Sie könnten sich die Client-Sammlung kurz vor der Ausführung des Abonnements ansehen. Sie könnten console.log einen find(). Fetch() oder einen find(). Count() für einen schnellen Überblick anzeigen, oder Sie könnten eines der verfügbaren Tools verwenden, um die Sammlungen genauer zu untersuchen. Die eine, die ich wirklich mag und benutze, ist https://github.com/bakery/meteor-devtools - einige Leute benutzen gerne Mongol. Sie machen es einfach einfacher, da Sie keine Befehle in Ihrem Code oder der Konsole eingeben müssen. –
Schöne Empfehlung über die Dev-Tools. Vielen Dank! – Allreadyhome