Une publication cache des champs imbriqués d'une autre publication

Étant donné deux publications pour la même collection nommée Foo. Le fooList ne doit que renvoyer des champs spécifiques, mais fooDetail doit renvoyer tout le document.

Serveur:

Meteor.publish 'fooList', -> return Foo.find( {} { fields: foo: true 'bar.bas': true }) Meteor.publish 'fooDetail', (foo_id) -> return Foo.find _id: foo_id 

Client:

 Meteor.subscribe 'fooList' Meteor.subscribe 'fooDetail', some_id 

Je m'attendais à obtenir le foo complet lors de la souscription de fooDetail. Mais tous les champs de 'bar' (le document imbriqué) ne sont pas disponibles, sauf le champ 'bar.bas'.

Est-ce un bug ou un météore devrait-il fonctionner de cette façon? (Je suis actuellement sur Meteor 1.0.3.2 et Iron-Router)

    Ce n'est pas un bug, c'est une limitation connue de la MergeBox du météore. C'est l'un de ces problèmes qui dérangent la plupart des météorologues une fois.

    Du docs :

    Si plus d'un abonnement envoie des valeurs contradictoires pour un champ (même nom de collection, ID de document et nom de champ), la valeur sur le client sera l'une des valeurs publiées choisies arbitrairement.

    Vous pouvez voir cette publication pour des solutions de contournement possibles. Dans votre exemple, vous pouvez modifier votre publication pour ressembler à:

     Meteor.publish 'fooList', -> Foo.find {}, fields: foo: 1, bar: 1 

    Cela publiera tout le champ de la bar haut niveau qui évite le conflit, mais peut ne pas être acceptable dans votre cas d'utilisation particulier.

    Votre pub / sous a l'air bien. Je suppose que vous n'avez pas ajouté de réactivité au sous fooDetail . Faites moi une faveur:

    1. waitOn deux sous- waitOn dans un waitOn sur le routeur de fer, en passant une valeur statique à fooDetail .
    2. Vérifiez dans minimongo que les autres champs sont là pour l'ID statique.
    3. Enroulez le sous dans un Template.Instance().autorun