2014-12-25 3 views
2

У меня есть следующая проблема: у меня есть интерфейс, в котором пользователь может фильтровать материал на основе нескольких входов. Есть 5 входов. Когда ввод заполняется, я хочу добавить его значение к помощнику, возвращающему коллекцию. Проблема, которую я не могу решить, заключается в том, как это сделать динамически. Иногда пользователь может заполнить один вход, иногда три, иногда все 5. В рамках метода находки() можно только записать синтаксис метеора:Назначить селекторы mongo в find() динамически

mongoSelector: fieldName, 

Это означает, что вы можете только жёстко~d материал в находке(). Но просто добавление всех 5 селекторов не работает, поскольку, если одно из значений пусто, поиск ищет пустую строку вместо ничего.

Я думал о выполнении условных обозначений или переменных, но оба они не работают внутри find из-за требуемого синтаксиса. Что я могу сделать, чтобы решить эту проблему?

var visitorName; 
var visitorAge; 
Session.set('visitorName', visitorName); 
Session.set('visitorAge', visitorAgee); 


Template.web.helpers({ 
    visitors: function() { 
     return Visitors.find({ visitor_name: Session.get('visitorName'), visitor_age: Session.get('visitorAge') }); 
    } 
}); 


Template.web.events({ 
    "change #visitor_name": function (event, template) { 
    visitorName = $(event.currentTarget).val(); 
    } 
}); 



Template.web.events({ 
    "click #reset_filter": function (event, template) { 
    return Visitors.find(); 
    $(input).val('');  
    } 
}); 
+0

Это, вероятно, лучше всего ответить с полным примером. Каковы типы ввода (текст, выбор и т. Д.)? Когда нужно найти обновление (отправить, настроить, изменить)? –

+0

http://jsfiddle.net/4zmt71py/ Вот пример. В этом примере он жестко закодирован и работает только при определении всех трех входов. То, что мне нужно достичь, - установить find() в зависимости от того, сколько входов определено. В конце концов я хочу сбросить его снова нажатием кнопки. Одним из вариантов является, например, проверка, определена ли сессия, а если нет, не включайте соответствующую часть. Но это, как и все остальное, о чем я думал, не работает из-за ограничения синтаксиса. Если условие: возвращение Visitors.find ({ если (Session.get ('visitorName') = не определено) {visitor_name: Session.get ('visitorName')}} ) –

+0

@AndreasGalster Пожалуйста, смотрите ниже ответ , – BatScream

ответ

1

http://jsfiddle.net/m5qxoh3b/

Это один работает

Template.web.helpers({ 
    visitors: function() { 
     var query = {}; 

     var visitorName = (Session.get('visitorName') || "").trim(); 
     if (visitorName) { 
      query["visitor_name"] = visitorName; 
     } 
     //same thing for other fields 

     return Visitors.find(query);    
    } 
}); 



Template.web.events({ 
    "change #visitor_name": function (event, template) { 
     var visitorName = $(event.currentTarget).val(); 
     Session.set('visitorName', visitorName); 
    } 
});