流星 Publications/Subscriptions 不工作
Meteor Publications/Subscriptions not working
我有点菜鸟,在让我的出版物发挥作用时遇到了一些麻烦。在我的数据中,我有很多患者,想显示单个患者的数据。这就是我构建出版物的方式:
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"));
});
出版物在理论上似乎很容易,但我似乎无法把它们做好。我在这里做错了什么?
订阅从服务器获取数据到 mini 需要时间 mongo,因此您必须等待订阅准备就绪,然后才能使用它将为您获取的数据。
如果您正在使用 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});
},
});
您也可以使用数据 属性,这样您就可以在模板 instance.data 中使用数据。
试试这个:
服务器端 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();
});
不要忘记在模板 html 文件中调用 {{getData}}
。
我有点菜鸟,在让我的出版物发挥作用时遇到了一些麻烦。在我的数据中,我有很多患者,想显示单个患者的数据。这就是我构建出版物的方式:
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"));
});
出版物在理论上似乎很容易,但我似乎无法把它们做好。我在这里做错了什么?
订阅从服务器获取数据到 mini 需要时间 mongo,因此您必须等待订阅准备就绪,然后才能使用它将为您获取的数据。
如果您正在使用 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});
},
});
您也可以使用数据 属性,这样您就可以在模板 instance.data 中使用数据。
试试这个:
服务器端 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();
});
不要忘记在模板 html 文件中调用 {{getData}}
。