Ich habe ein paar Probleme, wenn ich versuche, Daten von einer Meteor-Sammlung zu bekommen, und ich brauche einen Rat.
Die Sammlung wurde erfolgreich definiert, veröffentlicht und abonniert. Wenn ich die Daten an eine Vorlage sende, zeigt sie an:
%Vor%Aber ich versuche, die Daten vor der Anzeige zu verwenden, und hier stoße ich auf Probleme. Zuerst bekomme ich einige Inkonsistenzen zwischen find () und findOne (). find (selector) funktioniert gut und gibt einen Cursor zurück, aber findOne (selector) gibt "undefined" zurück. Ich suche wirklich nur nach 1 Eintrag, so dass find () unnötig erscheint.
Gibt LocalCollection.Cursor zurück:
%Vor%Gibt undefined zurück:
%Vor%Mein nächstes Problem tritt auf, wenn .fetch () auf dem LocalCollection.Cursor verwendet wird. Es gibt ein leeres Array zurück.
%Vor%all dies gibt die folgende Zeile zurück:
[]
Wenn ich versuche, einen bestimmten Schlüssel aus dem Array anzugeben, den ich anzeigen möchte, wie:
%Vor%Es gibt undefined zurück.
Ich mache mich immer noch mit Meteor vertraut und habe nie MongoDB (oder Minimongo) benutzt, also mache ich wahrscheinlich nur einen dummen Fehler. Wenn mir jemand darauf hinweisen könnte, wäre ich begeistert!
Ihre Ergebnisse für find () und findOne () sind konsistent. Im Grunde findet Mongo oder minimongo einfach kein Dokument, das dem _id entspricht. FindOne () ist genau wie eine Suche (selector, options) .fetch () [0].
Ihre Lists.Projects-Vorlage erwartet wahrscheinlich eine Sammlung, ein Array oder einen Hash, über den sie iterieren kann. Sie können kein bestimmtes Dokument zurückgeben. Wenn Sie {{#each Projects}} verwenden, müssen Sie eine Möglichkeit bereitstellen, damit die Vorlage nicht nur einen einzelnen Wert iteriert.
Ich hatte kürzlich das gleiche Problem,
Die Sammlung find () hat nichts zurückgegeben, wenn sie von query.observe
verwendet wurde.
Das Problem war die Reihenfolge der subscribe
der Sammlungen.
Zum Beispiel, wenn Sie eine Sammlung namens Lists
und eine namens Projects
,
Wenn Sie die Projekte durch Beobachtung einer Abfrage in Listen erhalten, und Sie hatten:
%Vor%Was passiert, ist, dass der Abfrage-Observe-Trigger aufgerufen wird, aber die Projekte noch nicht vom Server abgerufen wurden. Also Projects.find (). Fetch (). Length = 0.
Um es zu beheben, tun Sie einfach
%Vor%Wenn Sie Autopublish entfernt haben, was tun, wenn Sie die Sammlung für alle Benutzer veröffentlichen, ohne einen Veröffentlichungsnamen zu verwenden?
%Vor%wo Sie Ihre Sammlung abonnieren?
Vorlagenhelfer
%Vor%wie wenn wir Preis in jedem Produkt haben. Der Template-Teil sieht aus wie ...
%Vor%der js Teil, ich werde coffeescript verwenden ...
%Vor%Sie arbeiten am Client und Sie wissen nie, wann der Client alle benötigten Daten erhalten hat. Ihre Funktionen können ausgelöst werden, wenn die Sammlungen leer oder noch nicht fertig synchronisiert sind. Also müssen Sie eine verzögerte Anfrage an Ihren Minimongo machen (wenn alle Daten lokal verfügbar sind)
Und ja, du kannst nicht auf Sachen zugreifen, wenn sie nicht im DOM über getElementById()
oder etwas gerendert werden, aber in deinem Fall versuchst du auf Daten vom Minimongo (deiner lokalen Mongodb-Version im Browser) zuzugreifen, nicht vom DOM Vorlage ist hier nicht wichtig.
Warten Sie, bis Ihre Subskription bereit ist, dass Ihr minimongo alle Daten mit dem onReady
Callback in Ihrem Abonnement-Call besitzt und feuern Sie Ihre Funktionen ab.
Rückrufe (Funktion oder Objekt).
Optional. Kann onStop und onReady enthalten Rückrufe. Wenn ein Fehler vorliegt, wird dieser als Argument übergeben onStop. Wenn eine Funktion anstelle eines Objekts übergeben wird, ist dies der Fall als onReady Callback interpretiert.
Tags und Links meteor