2016-03-28 6 views
0

Ich möchte alle Benutzer finden, nicht den aktuellen Benutzer. Ein Paar von Benutzern innerhalb eines "Raumes" Array unter dieser Sammlung Struktur gespeichert ist:Filtern von Benutzer-IDs aus einer Reihe von Benutzern

Struktur jeden Raumes (von einer anderen HTML-Seite)

var newRoom = Rooms.insert({ 
    owner : Meteor.userId(), 
    receiver : receiver, 
    people : [ owner , receiver ], 
}); 

Collection.js (mit dburles collection helper)

Rooms.helpers({ 
    receiverName: function() { 
    return Meteor.users.findOne({ _id: this.receiver }).username; 
    } 
}); 

html

<!-- **allRooms.html** Works fine, names appear --> 
    {{#each rooms}} {{receiverName}}{{/each }} 

<!-- **roomDetail.html** names dont show, this.receiver undefined --> 
    {{receiverName}} 

roomDetail js template Helfer

self.subscribe('room', Router.current().params._id); 
self.subscribe('users'); 
}); 

Wie kann ich zurückkehren und die Kennung des Benutzers angezeigt werden das ist nicht der aktuelle Benutzer aus dem people Feld, das ein Array? Ich hoffe, es in der Kinderseite (roomDetail) zu zeigen.

Antwort

1

Unter der Annahme:

  • Rooms eine Sammlung ist, und Sie haben bereits ein room Dokument suchen auf.
  • Sie möchten nur einen einzelnen Benutzer abrufen.

geben diesem einen Versuch:

// The list of userIds in room minus the current user's id. 
var userIds = _.without(room.People, Meteor.userId()); 

// Assuming we want only one user... 
var user = Meteor.users.findOne({ _id: userIds[0] }); 

Einige Gedanken über Ihren ursprünglichen Code:

  • Sie können keine Verweise auf Rooms in Ihrem Meteor.users Selektor enthalten, es sei denn Rooms ein Feld der Benutzer ist . Mongo hat keine Ahnung von Joins.
  • $ne ist nicht das du willst. Wenn Sie 100 Benutzer veröffentlicht haben und Ihr Array nur zwei Benutzer enthält (von denen Sie nicht möchten), würde die Verwendung von $ne 99 Benutzer zurückgeben.

Basierend auf Ihre Kommentare, es sieht aus wie Sie diese in einem collection helper benötigen. so etwas wie dies vielleicht:

Rooms.helpers({ 
    findUser: function() { 
    var userIds = _.without(this.People, Meteor.userId()); 
    return Meteor.users.findOne({ _id: userIds[0] }); 
    }, 
}); 

Und dann an anderer Stelle im Code, für ein gegebenes room Beispiel könnten Sie tun:

room.findUser() 
+0

Ich bin nicht sicher, wie das zu beantworten. Vielleicht würden Sie 'user' von einem Helfer irgendwo auf dem Client zurückgeben? –

+0

Ich aktualisierte die Antwort mit einem Beispiel-Collection-Helfer. Vielleicht hilft dir das dabei, dich in die richtige Richtung zu führen. –

+0

Ich habe die Antwort aktualisiert, um mit ES5 kompatibel zu sein. Ja, dieser Helfer nimmt einen Raum als Kontext an, also vielleicht '{{################################################### Wieder ist es wirklich schwer für mich, genau zu sagen, was geschrieben werden soll, ohne die Quelle zu sehen. –

Verwandte Themen