2

我知道如何有条件地在流星中发布数据,但你如何有条件地订阅?我正在考虑这样一种情况,您的应用程序具有单独的页面(例如使用meteor-router)并且您只需要在某些页面上进行某些订阅。

4

2 回答 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 回答