我有一個名爲Games
的集合,我希望用戶使用複選框篩選集合。每次複選框被選中/取消,流星訂閱稱爲顯示相應Games
過濾集合的更好模式
這裏是一個什麼樣的認購可能看起來像(不正確的蒙戈代碼)的例子:
{region: ['east','west','eu'], skill: ['casual','amatuer','pro'], gamemode: ['ctf','dm','etc']}
在這個特殊的遊戲你可以過濾區域,技能和遊戲模式,每個有多個組合。
編輯:
我需要做的是建立適當的選擇,這取決於複選框被選中。
首先,我抓住選中的複選框 - 對於每個組 - 然後將它們引入數組,然後將該數組設置爲會話變量。
// 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);
};
希望這一切都有道理。我確信必須有更好的方式,我現在只是無法想到什麼。謝謝。
這感覺很像[這個問題](http://stackoverflow.com/questions/23937772/meteor-best-method-for-passing-mongo-selector-from-client-to-server)。我的答案是將選擇器傳遞給發佈函數 - 在這裏也可能適用。 –
@DavidWeldon我的問題不一定是pub/sub,但更多的是關於生成正確的選擇器,具體取決於檢查哪個複選框。我將編輯我的原始文章,更詳細地解釋我想要做的事情。 – Nathan