Meteor publications/subscriptions 未按预期工作
Meteor publications/subscriptions not working as expected
我有两个出版物。
第一个酒吧实现了搜索。 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);
});
第二个基本returns一些字段
/* 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
)时,第一个订阅不起作用。当我评论第二个订阅时,第一个订阅再次起作用。我不确定我在这里做错了什么。
这里的问题是您对同一个集合有两套出版物。因此,当您在客户端中引用该集合时,现在可以指定它也必须引用哪一个出版物。
您可以做的是,将所有数据集中发布,即您将需要的所有字段,然后在客户端上使用代码对它们执行查询。
或者,更好的方法是使用两个模板。一个描述码:
<template name="template1">
//Code here
{{> template2}} //include template 2 here
</template>
<template name="template2">
//Code for template 2
</template>
现在,订阅一份出版物到模板一,然后在那里做一些事情。订阅模板 2 的第二次发布。
在主模板 (template1
) 中使用句柄语法 {{> template2}}
在其中包含 template2
我有两个出版物。
第一个酒吧实现了搜索。 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);
});
第二个基本returns一些字段
/* 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
)时,第一个订阅不起作用。当我评论第二个订阅时,第一个订阅再次起作用。我不确定我在这里做错了什么。
这里的问题是您对同一个集合有两套出版物。因此,当您在客户端中引用该集合时,现在可以指定它也必须引用哪一个出版物。
您可以做的是,将所有数据集中发布,即您将需要的所有字段,然后在客户端上使用代码对它们执行查询。
或者,更好的方法是使用两个模板。一个描述码:
<template name="template1">
//Code here
{{> template2}} //include template 2 here
</template>
<template name="template2">
//Code for template 2
</template>
现在,订阅一份出版物到模板一,然后在那里做一些事情。订阅模板 2 的第二次发布。
在主模板 (template1
) 中使用句柄语法 {{> template2}}
template2