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

从理论上讲,出版物似乎很容易,但我似乎无法正确解决它们。我在这里做错了什么?

4

2 回答 2

0

尝试这个:

服务器端Js

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

路由器 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 文件中调用。

于 2016-08-26T15:11:12.860 回答
0

订阅将数据从服务器获取到 mini mongo 需要时间,因此您必须等待订阅准备好,然后才能使用它将为您获取的数据。

如果您使用 Iron Router,请尝试使用 waitOn 而不是 subscribe,这将强制路由器等待订阅准备好,并在获取订阅数据时呈现加载模板。

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 中获得数据。

于 2016-08-26T14:21:51.393 回答