2016-08-27 4 views
1

У меня есть две публикации.Метеорные публикации/подписки не работают должным образом

Первый паб реализует поиск. This search в частности.

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

Второй в основном возвращает несколько полей

/* 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'); 
}); 

Так вот моя проблема: Когда я использую вторую подписку (до appointments.patients), первый не работает. Когда я комментирую вторую подписку, первая работает снова. Я не уверен, что я делаю неправильно здесь.

ответ

0

Вопрос здесь у вас есть два набора публикаций для той же коллекции. Поэтому, когда вы ссылаетесь на коллекцию на клиенте, теперь можно указать, какую из публикаций она должна ссылаться.

Что вы можете сделать, публиковать все данные, а именно все поля, которые вам понадобятся, а затем использовать код на клиенте для выполнения запросов на них.

Альтернативно, лучший подход состоит в том, чтобы иметь два шаблона. Описательный код:

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

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

Теперь подпишитесь на одну публикацию на шаблон и сделайте там материал. Подпишитесь на вторую публикацию в шаблон 2. В основном шаблоне (template1) включены template2 в нем с использованием синтаксиса руля {{> template2}}