在Publish / Subscribe中使用session.get变量

时间:2015-06-16 19:30:18

标签: javascript mongodb if-statement meteor session-variables

我试图显示仅可加载所需内容的客户的可过滤数据库。我有两个变量(从下拉列表中选择)设置两个会话(country_plugin和vertical_plugin)。然后我想显示符合这些要求的内容。

如果您不担心自动发布,下面的代码可以完美运行,但我不知道如何使用pub / sub实现相同的功能。

因此,简而言之,我如何在这里使用session.get和if语句?

filteredclients: function () {
            var clientVerticalPicked = Session.get('vertical_plugin');
        var clientCountryPicked = Session.get('country_plugin');
            if (Session.get("country_plugin") === "none"){
                    return Clients.find({dealVerticalLink: clientVerticalPicked}, {sort: {dealMRR: -1}, limit:10});
            } else if (Session.get("vertical_plugin") === "none"){
                    return Clients.find({dealCountry: clientCountryPicked}, {sort: {dealMRR: -1}, limit:10});
            } else {
                    return Clients.find({$and:[{dealVerticalLink: clientVerticalPicked},{dealCountry: clientCountryPicked}]}, {sort: {dealMRR: -1}, limit:10});
            }
        }

1 个答案:

答案 0 :(得分:3)

会话变量仅在客户端上定义,因此您无法从发布功能中访问它们。您可以在客户端的Tracker.autorun中进行订阅,并将Session变量传递给publish函数:

Tracker.autorun(function() {
    Meteor.subscribe('filteredclients', Session.get('vertical_plugin'), Session.get('country_plugin'))
});

在服务器上:

Meteor.publish('filteredclients', function(vertical_plugin, country_plugin) {
    if(country_plugin === "none") { return ... }
});

等。然后客户端上的Clients.find()应该只包含您想要的记录。