我有一个名为Games
我希望用户使用复选框来过滤集合。每次选中/取消选中复选框时,都会调用流星订阅来显示相应的内容Games
以下是订阅的示例(不是正确的 mongo 代码):
{region: ['east','west','eu'], skill: ['casual','amatuer','pro'], gamemode: ['ctf','dm','etc']}
在这个特定的游戏中,您可以按地区、技能和游戏模式进行过滤,每种都有多种组合。
Edit:
我需要的是创建适当的选择器,具体取决于选中的复选框。
首先,我抓取每个组的选中复选框,并将它们放入一个数组中,然后将该数组设置为会话变量。
// Gamemode Group
'click .mode input[type=checkbox]': function(ev, tpl) {
var mode = tpl.$('.mode input:checked').map(function () {
return $(this).val();
});
var modeArray = $.makeArray(mode);
Session.set('dotaMode', modeArray);
returnFilterQuery();
},
然后我检查每个组数组以查看它们是否已填充,如果是,则将它们添加到最终选择器(query
)我将其传递到订阅中。我的问题是我必须检查每种可能的情况,但除了if
语句,一旦我开始添加更多组(游戏模式、区域、技能等)进行搜索,就会有更多的组合。
function returnFilterQuery(){
//check all fields and create a query object
var query = { game: 'dota' };
var gamemode = Session.get('dotaMode');
var region = Session.get('dotaRegion');
var skill = Session.get('dotaSkill');
// if no region or skill is selected, show user all
if (region.length && skill.length && gamemode.length) {
query.region = { $in: region };
query.skill = { $in: skill };
query.gamemode = { $in: gamemode };
} else if (region.length && !skill.length && gamemode.length) {
query.region = { $in: region };
query.gamemode = { $in: gamemode };
} else if (!region.length && skill.length && gamemode.length) {
query.skill = { $in: skill };
query.gamemode = { $in: gamemode };
} else if (!region.length && !skill.length && gamemode.length) {
query.gamemode = { $in: gamemode };
} else if (region.length && skill.length && !gamemode.length) {
query.region = { $in: region };
query.skill = { $in: skill };
} else if (region.length && !skill.length && !gamemode.length) {
query.region = { $in: region };
} else if (!region.length && skill.length && !gamemode.length) {
query.skill = { $in: skill };
}
return Session.set('dotaFilter', query);
};
希望这一切都有道理。我确信必须有更好的方法,我只是现在想不出什么。谢谢。