我知道如何有条件地在流星中发布数据,但你如何有条件地订阅?我正在考虑这样一种情况,您的应用程序具有单独的页面(例如使用meteor-router)并且您只需要在某些页面上进行某些订阅。
问问题
745 次
2 回答
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.
});
于 2013-05-22T19:12:51.837 回答
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()
是反应式的,一旦你路由到不同的页面,订阅就会改变。
于 2013-05-22T20:10:01.587 回答