2016-11-25 5 views
0

Je les modèles suivants:publication MeteorJS allant au-delà la portée

<template name="reportsContent"> 
    <ul class="tabs"> 
     <li class="tabs-content" data-content="summary"> 
      <div class="tabs-content-wrapper"> 
       {{> reportsSummary }} 
      </div> 
     </li> 
     <li class="tabs-content" data-content="patients"> 
      <div class="tabs-content-wrapper"> 
       {{> reportsPatients }} 
      </div> 
     </li> 
    </ul> 
</template> 

<template name="reportsSumary"> 
    .... 
</template> 

<template name="reportsPatients"> 
    .... 
</template> 

J'ai joint une publication au modèle reportsSummary, mais il semble étendre au modèle reportsPatients aussi. Je ne sais pas pourquoi puisque j'ai suivi la bonne méthode pour définir les pubs/sous-marins (je pense ...).

Je sais qu'il est étendre à reportsPatients parce que je si je reviens Appointments.find() d'une aide reportsPatients sans souscrire à une publication, je reçois les données qui sont aussi dans reportsSummary

Voici ma publication:

Meteor.publish('appointments.day.patients', function() { 

    var thisMonth = new RegExp(moment().format('MMM YYYY')); 

    return Appointments.find({ 
     date_created: { $regex: thisMonth } 
    }, { fields: { date_created: 1 } }); 
}); 

Et voici mon abonnement:

Template.reportsSummary.onCreated(function() { 
    this.subscribe('appointments.day.patients'); 
}); 

ce n'est pas que ce que je est la rupture de toutes les fonctionnalités en soi. Je suis juste inquiet au sujet de l'efficacité quand l'application a beaucoup de données qu'elle doit passer au crible. Est-ce que j'ai râté quelque chose?

+0

Les publications n'ont aucune portée. Si les données sont publiées sur le client, elles seront disponibles partout jusqu'à ce que l'abonnement soit annulé. – MasterAM

Répondre

0

Vous ne manquez rien, c'est le comportement normal dans Meteor. Les données publiées à partir du serveur n'ont pas de portée. Une fois que les données sont publiées sur le client, tous les clients peuvent y accéder, même le code exécuté dans la console du navigateur peut le faire.

Ces données publiées ne seront effacées dans le client que lorsque l'abonnement utilisé pour s'y abonner sera fermé. Comme dans votre exemple, parce que vous utilisez this.subscribe dans le modèle reportsSummary, cet abonnement sera fermé lorsque reportsSummary est détruit (lorsque l'événement onDestroyed est déclenché).

C'est une bonne pratique dans Meteor de toujours mettre une requête dans collection.find pour obtenir des documents. De cette façon, votre opération est explicite sur ce que vous prévoyez obtenir, et empêche les documents indésirables d'être renvoyés.