你如何有条件地订阅流星前端的数据?

时间:2013-05-22 19:07:01

标签: javascript meteor

我知道如何conditionally publish data meteor,但您如何有条件订阅? 我想的是你有一个具有单独页面的应用程序的情况(例如,使用meteor-router),你只需要在某些页面上进行某些订阅。

2 个答案:

答案 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()是被动的,因此只要您转到其他网页,订阅就会被更改。