我知道如何conditionally publish data meteor,但您如何有条件订阅? 我想的是你有一个具有单独页面的应用程序的情况(例如,使用meteor-router),你只需要在某些页面上进行某些订阅。
答案 0 :(得分:2)
在if
方法中使用Deps.autorun()
语句。 if
语句应针对Session
变量进行测试,这将使其成为被动变量,在条件发生变化时触发Deps.autorun
更改订阅。因此:
Deps.autorun(function() {
sub.stop(); // Stop the previous subscription, because it's changed.
if (Session.equals('page', 'foo')) {
sub = Meteor.subscribe('bar');
} else if (Session.equals('page', 'lorem')) {
sub = Meteor.subscribe('ipsum');
}
// etc.
});
答案 1 :(得分:1)
您还可以根据页面进行多集合发布/订阅。随着页面的更改,订阅会根据页面的内容自动更改:
客户端js
Deps.autorun(function() {
Meteor.subscribe("page_subscriptions", Meteor.Router.page());
});
服务器端js
Meteor.publish("page_subscriptions", function(page) {
if(page=="home") {
return [
Collection1.find({}),
Collection2.find({}),
Collection3.find({})
];
}else if(page=="about") {
return [
Collection3.find({}),
Collection4.find({})
];
}
});
因此,每个页面都有自己的一组集合,可以使用相同的订阅进行个性化查询。
由于Meteor.Router.page()
是被动的,因此只要您转到其他网页,订阅就会被更改。