我试图显示仅可加载所需内容的客户的可过滤数据库。我有两个变量(从下拉列表中选择)设置两个会话(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});
}
}
答案 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()应该只包含您想要的记录。