2014-07-12 4 views
0

Je n'arrive toujours pas à comprendre comment accéder à Meteor.users en tant que clé étrangère d'une autre requête de collection. Je comprends que seul l'utilisateur actuel est publié par défaut, donc j'ai une publication sur le serveur commeCollection d'utilisateurs Meteor et problèmes de Deps.autorun

Meteor.publish('itemOwner', function(userId) { 
    check(userId, String); 
    var user = Meteor.users.find({id: userId}); 
    return user; 
    // return Meteor.users.find({id: userId}, { 
    // fields: {'profile': 1} }); 
}); 

J'ai alors Deps.autorun sur le client ..

Deps.autorun(function() { 
    var itemOwnerId = Session.get("itemOwnerID"); 
    if (itemOwnerId) { 
    debugger 
    var ID = Session.get("itemOwnerID"); 
    Meteor.subscribe('itemOwner', Session.get("itemOwnerID")); 
    } 
}); 

Je mets la session ID sur une charge de forme modale et l'afficher dans le modèle en appelant l'aide ownerProfile (ou essayer de)

Template.showQuoteModalInner.helpers({ 
    getQuote: function() { 
    // Get the quote ID from the session var 
    var quote = Session.get("quoteID"); 
    if(quote) { 
     debugger; 
     var ID = quote.user._id; 
     Session.set("itemOwnerID", quote.user._id); 
     return quote; 
    } 
    }, 
    ownerProfile: function() { 
    debugger; 
    var quote = Session.get("quoteID"); 
    if(quote) { 
     var ID = quote.user._id; 
     var theUser = Meteor.users.find({_id: quote.user._id}); 
     return theUser; 
    }; 
    } 
}); 

maintenant, je peux retracer l'ID utilisateur à chaque étape et voir se correctement transmis à l'autorun un d les aides. Si j'arrête le programme au débogueur dans l'helper ownerProfile et dans la console met dans Meteor.user.fetch ({_ id: "l'id ici"}). Fetch() j'obtiens l'utilisateur correct .. mais, dans le gestionnaire lui-même le Meteor.users.find renvoie null ??? Qu'est-ce que je rate?

Répondre

2

Deux possibilités que j'ai remarquées. D'abord, il vous manque un trait de soulignement dans la recherche de votre fonction de publication.

.find({id: userId}) doit être .find({_id: userId}).

Mais ce n'est probablement pas le problème si vous voyez l'utilisateur (autre que l'utilisateur connecté) dans la console. Deuxièmement, si vous ne voyez pas l'utilisateur depuis votre assistant Template.showQuoteModalInner.ownerProfile, c'est probablement parce que vous renvoyez un find() au lieu d'un findOne(). Find() renvoie un curseur alors que findOne() renvoie l'enregistrement. Essayez findOne() si vous souhaitez afficher les attributs de cet utilisateur unique.

+0

Correction de ces deux problèmes et tout fonctionne !! Je vous remercie. J'ai regardé cela pendant des jours mais je n'ai pas vu ça. –

Questions connexes