1

私は2つの出版物を持っています。

最初の pub は検索を実装します。特にこの検索

 /* publications.js */
Meteor.publish('patients.appointments.search', function (search) {
    check(search, Match.OneOf(String, null, undefined));

    var query = {},
    projection = { 
         limit: 10,
         sort: { 'profile.surname': 1 } };

    if (search) {
        var regex = new RegExp( search, 'i' );

        query = {
            $or: [
                {'profile.first_name': regex},
                {'profile.middle_name': regex},
                {'profile.surname': regex}
          ]
     };

    projection.limit = 20;
}
   return Patients.find(query, projection);
});

2番目のものは基本的にいくつかのフィールドを返します

/* publications.js */
 Meteor.publish('patients.appointments', function () {
   return Patients.find({}, {fields:  {'profile.first_name': 1,
                'profile.middle_name': 1,
                'profile.surname': 1});
});

私は次のように各出版物を購読しました:

/* appointments.js */
Template.appointmentNewPatientSearch.onCreated(function () {
    var template = Template.instance();

    template.searchQuery = new ReactiveVar();
    template.searching = new ReactiveVar(false);

    template.autorun(function () {
       template.subscribe('patients.appointments.search', template.searchQuery.get(), function () {
          setTimeout(function () {
              template.searching.set(false);
          }, 300);
       });
    });
});


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

ここに私の問題があります: 2 番目のサブスクリプション (へappointments.patients) を使用すると、最初のサブスクリプションが機能しません。2 番目のサブスクリプションにコメントすると、最初のサブスクリプションが再び機能します。ここで何が間違っているのかわかりません。

4

1 に答える 1

0

ここでの問題は、同じコレクションに対して 2 セットの出版物があることです。したがって、クライアントでコレクションを参照するときに、どのパブリケーションも参照する必要があるかを指定する方法があります。

できることは、すべてのデータをまとめて公開することです。つまり、必要なすべてのフィールドを公開し、クライアントでコードを使用してクエリを実行します。

別の方法として、2 つのテンプレートを用意することをお勧めします。説明的なコード:

<template name="template1">
   //Code here
      {{> template2}}   //include template 2 here
</template>

<template name="template2">
     //Code for template 2
</template>

次に、1 つのパブリケーションをテンプレート 1 にサブスクライブし、そこで作業を行います。テンプレート 2 の 2 番目のパブリケーションをサブスクライブします。メイン テンプレート ( template1) にtemplate2、ハンドルバー構文を使用してインクルードします。{{> template2}}

于 2016-08-27T15:09:53.117 に答える