2016-04-17 3 views
0

Ich mag den Kunden alle Benutzer veröffentlichen (die schließlich nur das ‚Profil‘ Feld aller Benutzer sein werden):Meteor 1.3: Wie erstelle ich eine client only-Sammlung, die einige Felder aus der db-Sammlung des Benutzers enthält?

Die Veröffentlichung auf dem Server die wie folgt aussieht: In

Meteor.publish('users', function users() { 
    return Meteor.users.find(); 
}); 

meine Vorlage ich habe dann ein Abonnement, das wie folgt aussieht:

Template.Users_show_page.onCreated(function usersShowPageCreated() { 
    this.subscribe('users'); 
}); 

jedoch die ‚Nutzer‘ Variable nicht verfügbar ist, und ich habe noch über Meteor.users die Benutzer zugreifen kann, wie in dem folgenden Code:

Template.Users_show_page.helpers({ 
    users() { 
     return Meteor.users.find(); 
    } 
}); 

Warum ist das?

Ich denke, ich muss eine clientseitige Sammlung mit meiner Wahl des Namens erstellen - also "Benutzer", und dann kann ich auf diese Sammlung zugreifen.

Wo mache ich das und wie mache ich diese Synchronisierung mit den Benutzern in der Datenbank?

+0

I Ich bin mir nicht sicher, ob ich verstehe, was Sie erwartet haben. Was hat Sie dazu gebracht zu denken, dass eine solche Variable verfügbar sein wird? Können Sie näher erläutern, was Sie erwartet haben? – MasterAM

+0

Ich erwartete, dass in der Funktion users() ich users.find() anstelle von Meteor.users.find() –

+0

zurückgeben könnte Nun, die 'Benutzer' Sammlung ist unter dem' Meteor' Namensraum, aber Sie könnten Erstellen Sie immer eine Dateibereichsbenutzervariable. Die Publikation aktualisiert eine Auflistung, sie erstellt keine globalen Variablen. Wie auch immer, was ist falsch daran, 'Meteor.users' zu benutzen? – MasterAM

Antwort

1
MyCollection = new Meteor.Collection('foo'); 

Meteor.publish('myPublication', function() { 
    return MyCollection.find(); 
}); 

Der obige Code erzeugt keine myPublication überall variabel. Es ist nur der Name der Veröffentlichung/des Abonnements. Sie können sogar mehrere verschiedene Abonnements für dieselbe Sammlung haben. Dieser Code gibt einen Cursor für die Mongo-Sammlung foo zurück, auf die Sie über das MyCollection-Objekt zugreifen.

Ihr Code muss also kein neues Mongo.Collection erstellen. Verwenden Sie einfach Meteor.users, denn das ist das Mongo.Collection Objekt, das bereits mit "Benutzern" in MongoDB verknüpft ist.

Wenn Sie die Dokumente in einem Benutzer-Variable wirklich zugreifen möchten, müssen Sie noch die Helfer erstellen, wie Sie vorgeschlagen, obwohl es besser ist, die Sie verwenden Meteor.users nur anstelle des Helfers unter:

Template.template_name.helpers({ 
    users: function(){ return Meteor.users.find() } 
}); 
Verwandte Themen