Veröffentlichen von Dokumenten in einer Sammlung für einen Meteor-Client in Abhängigkeit vom Vorhandensein eines bestimmten Dokuments in einer anderen Sammlung (publish-with-relations)

8

Ich habe zwei Sammlungen

  1. Angebote (relevante Felder: _ id )
  2. ShareRelations (relevante Felder: receiverId und offerId )

und ich möchte nur die Angebote für den angemeldeten Benutzer veröffentlichen, die für ihn freigegeben wurden.

Tatsächlich mache ich das, indem ich ein Helfer-Array (visibleOffers) benutze, das ich für jedes ShareRelations-Element durchläuft und dieses Array später im Offers.find als $ in-Selektor verwende.

Ich frage mich, ob dies der Meteorweg ist, um dies zu tun, oder ob ich mit weniger oder besserem Code auskommen könnte?

Mein tatsächlicher Code zum Veröffentlichen der Angebote lautet wie folgt:

%Vor%

Außerdem hat die tatsächliche Lösung den Nachteil, dass, wenn eine neue Share-Beziehung erstellt wird, die Offices-Sammlung auf dem Client nicht sofort mit dem neu sichtbaren Angebot aktualisiert wird (lesen Sie: Neuladen der Seite erforderlich. Aber ich nicht.) Sicher, wenn dies der Fall ist wegen dieser Veröffentlichungsmethode oder wegen eines anderen Codes ist diese Frage nicht primär wegen dieses Problems).

    
Roger Schaerer 24.12.2013, 00:35
quelle

3 Antworten

9

Was Sie suchen, ist eine reaktive Verbindung. Sie können dies erreichen, indem Sie entweder direkt in der Veröffentlichungsfunktion beobachten oder eine Bibliothek für Sie verwenden. Es wird erwartet, dass der Meteor-Kern irgendwann eine Join-Bibliothek hat, aber bis dahin " Ich empfehle, publish-with-relations zu verwenden. Sehen Sie sich die Dokumentation an, aber ich denke, die gewünschte Veröffentlichungsfunktion sieht ungefähr so ​​aus:

%Vor%

Dies sollte reaktiv alle ShareRelations für den Benutzer und alle zugehörigen Offers veröffentlichen. Hoffentlich veröffentlichen beide kein Problem.

PWR ist ein ziemlich legales Paket - einige von uns verwenden es in der Produktion, und Tom Coleman trägt dazu bei. Das Einzige, worüber ich euch warnen wird ist, dass die aktuelle Version in Atmosphäre (v0.1.5) einen Fehler hat, der zu einem ernsthaften Speicherverlust führen wird. Bis das Problem behoben ist, finden Sie in meinem Blogpost Informationen zum Ausführen einer aktualisierten lokalen Kopie.

update 2/5/14:

Der Meteorblog entdecken hat einen ausgezeichneten Beitrag auf reaktiven Verbindungen , die ich sehr empfehlen zu lesen .

    
David Weldon 25.12.2013, 06:25
quelle
0

Die Art und Weise, dies zu tun, folgt dieser Frage mit observeChanges (). Ich versuche immer noch herauszufinden, wie man alles für mein Beispiel funktioniert, siehe Meteor, Eins-zu-Viele-Beziehung & amp; Feld nur zur clientseitigen Sammlung in Publish hinzufügen?

    
Giant Elk 12.01.2014 05:06
quelle
0

Sie können die Reaktiv veröffentlichen Paket (Ich bin einer der Autoren):

%Vor%

Sie können Ihren vorhandenen nicht-reaktiven Code einfach in ein autorun einfügen und es wird zu arbeiten beginnen. Nur vorsichtig sein, um genau zu sein, welche Felder auf, weil abfragen, wenn Sie auf allen Feldern abfragen dann autorun auf jedem Feld Wechsel ShareRelations erneut ausgeführt werden, nicht nur offerId .

    
Mitar 03.10.2015 12:03
quelle

Tags und Links