0

次のテンプレートがあります。

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

テンプレートに出版物を添付しましたが、reportsSummaryテンプレートにも拡張されているようreportsPatientsです。pubs/subs を定義するための正しい方法に従っているので、その理由はわかりません (私は思う...)。

パブリケーションを購読せずにヘルパーからreportsPatients戻った場合、次のデータも取得しているため、拡張していることはわかっています。Appointments.find()reportsPatientsreportsSummary

これが私の出版物です:

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

そして、これが私のサブスクリプションです:

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

私が持っているものが機能自体を壊しているわけではありません。アプリにふるいにかけなければならない大量のデータがある場合、効率が心配です。ここで何か不足していますか?

4

1 に答える 1

0

これは Meteor の通常の動作です。サーバーから公開されたデータにはスコープがありません。データがクライアントに公開されると、すべてのクライアントがそれらにアクセスできます。ブラウザ コンソールで実行されるコードでもアクセスできます。

これらのパブリッシュされたデータは、それらのサブスクライブに使用されたサブスクリプションが閉じられたときにのみ、クライアントでクリアされます。あなたの例のように、this.subscribe内部テンプレートを使用しているため、このサブスクリプションは破棄されたとき (イベントが発生したとき)reportsSummaryに閉じられます。reportsSummaryonDestroyed

Meteor では、常にクエリを使用しcollection.findてドキュメントを取得することをお勧めします。このようにして、あなたの操作はあなたが期待するものについて明示的であり、不要なドキュメントが返されるのを防ぎます.

于 2016-11-27T04:54:16.283 に答える