2016-11-25 3 views
0

Ich habe folgende Vorlagen:MeteorJS Veröffentlichung über Umfang erstreckt

<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> 

Ich habe eine Publikation der reportsSummary Vorlage angebracht, aber es scheint sich auf die reportsPatients Vorlage werden erstreckt. Ich bin nicht sicher, warum, seit ich die richtige Methode zur Definition von Pubs/Subs (denke ich ...) gefolgt bin.

Ich weiß, dass es zu reportsPatients ist erstreckt, weil ich, wenn ich Appointments.find() von einem reportsPatients Helfer zurück, ohne auf eine Veröffentlichung zu abonnieren, ich die Daten erhalten, die auch

Hier ist meine Veröffentlichung in reportsSummary ist:

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 } }); 
}); 

Und hier ist mein Abonnement:

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

Es ist nicht das, was ich habe bricht irgendwelche Funktionalitäten per se. Ich mache mir nur Sorgen um die Effizienz, wenn die App eine ganze Menge Daten hat, die sie durchforsten muss. Fehle ich hier etwas?

+0

Veröffentlichungen haben keinen Anwendungsbereich. Wenn die Daten auf dem Client veröffentlicht werden, sind sie überall verfügbar, bis das Abonnement rückgängig gemacht wird. – MasterAM

Antwort

0

Sie verpassen nichts, das ist das normale Verhalten in Meteor. Vom Server veröffentlichte Daten haben keinen Gültigkeitsbereich. Sobald die Daten auf dem Client veröffentlicht sind, können alle Clients auf sie zugreifen, sogar Code, der in der Browser-Konsole ausgeführt wird, könnte dies tun.

Diese veröffentlichten Daten werden nur dann im Client gelöscht, wenn das Abonnement geschlossen wurde, das zum Abonnieren verwendet wurde. Wie in Ihrem Beispiel, weil Sie this.subscribe innerhalb reportsSummary Vorlage verwenden, so wird dieses Abonnement geschlossen, wenn reportsSummary zerstört wird (wenn das Ereignis onDestroyed ausgelöst wird).

Es ist eine bewährte Methode in Meteor, immer eine Abfrage in collection.find zu stellen, um Dokumente zu erhalten. Auf diese Weise wird deutlich, was Sie erwarten, und unerwünschte Dokumente werden nicht zurückgegeben.