2016-08-26 3 views
0

Я немного нуб и немного беспокоюсь о том, чтобы мои публикации работали. По моим данным, у меня есть несколько пациентов, и я хотел бы показать данные одного пациента. Это, как я структурировали мою публикацию:Метеор Публикации/Подписки не работают

Meteor.publish('patients.single', function (patientId) { 
    check(patientId, String); 
    return Patients.find({_id: patientId}); 
}); 

и это, как я подписался:

Router.route('/patients/:_id', { 
    layoutTemplate: 'ApplicationLayout', 
    yieldRegions: { 
    'single_patient': {to: 'content'} 
    }, 
    subscriptions: function() { 
    return Meteor.subscribe('patients.single', this.params._id); 
    } 
}); 

Я также попытался подписаться с помощью фактического шаблона, но безрезультатно:

Template.patient_details.onCreated(function() { 
    this.subscribe('patients.single', Session.get("currentPatient")); 
}); 

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

ответ

0

Требуется время для подписки, чтобы получить данные с сервера на мини-монго, поэтому вам нужно подождать, пока подписка будет готова, прежде чем использовать данные, которые она получит для вас.

Если вы используете Iron Router, попробуйте использовать waitOn вместо подписки, что заставит маршрутизатор ждать, пока подписка будет готова, и отобразит шаблон загрузки при получении данных подписки.

Router.route('/patients/:_id', { 
    layoutTemplate: 'ApplicationLayout', 
    yieldRegions: { 
    'single_patient': {to: 'content'} 
    }, 
    waitOn: function() { 
    return Meteor.subscribe('patients.single', this.params._id); 
    } 
    data: function() { 
    return Patients.findOne({_id: this.params._id}); 
    }, 
}); 

Вы также можете использовать свойство data, таким образом, у вас будут данные, доступные в вашем шаблоне instance.data.

0

Попробуйте это:

стороне сервера Js

Meteor.publish('patients.single', function (patientId) { 
    check(patientId, String); 
    return Patients.find({_id: patientId}); 
}); 

Router JS файл

Router.route('/patients/:_id', { 
    layoutTemplate: 'ApplicationLayout', 
    yieldRegions: { 
    'single_patient': {to: 'content'} 
    }, 
    waitOn: function() { 
    return Meteor.subscribe('patients.single', this.params._id); 
    } 
}); 

В клиенте JS файл

Template.patient_details.helpers({ 
    getData : function(){ 
     return Collection.find().getch(); 

}); 

Не забудьте позвонить {{getData}} в шаблон html-файла.

+0

Спасибо. Я пробовал это, но почему-то это не работает ... Я не знаю, почему. Может быть, потому, что у меня есть другие публикации той же коллекции? – wiredfordesign

+0

вы можете отредактировать вопрос и добавить файл шаблона. Это не из-за многочисленных публикаций. Вы можете иметь несколько публикаций из одной коллекции. – Ankit

Смежные вопросы