2013-06-27 4 views
2

Я хочу написать вспомогательный метод, который возвращает список профилей пользователей на основе учетных записей - facebook, отсортированных по подполе документа профиля. Помощник должен полагаться на две переменные сеанса, чтобы указать подполе и порядок сортировки. Переменные сеанса могут обновляться через пользовательский интерфейс, заставляя список повторно отображать в новом порядке. Что-то вроде:Meteor: Как я могу сортировать коллекцию на переменной сеанса?

Session.set('sortby', "profile.email"); 
Session.set('sortorder', "-1"); 

Template.userlist.users = function() { 
    Meteor.users.find({}, {sort:{Session.get('sortby'):Session.get('sortorder')}}); 
} 

Session.get('sortby') Использование в качестве имени свойства выдает ошибку, хотя. Итак, вопрос в том, как я могу использовать переменную сеанса для указания имени поля сортировки?

+0

вы попробуйте конвертировать Session.get («SortOrder») в целое число? – imslavko

+0

'Meteor.users.find ({}, {sort: {Session.get ('sortby'): + Session.get ('sortorder')}}); ' – imslavko

+0

Какая ошибка вы получаете здесь? можете ли вы опубликовать эту ошибку? –

ответ

4

Initialize объект и связать ключ и значение Это. Затем передайте запрос. Например .:

var filter = {sort: {}}; 
filter.sort[Session.get('sortby')] = Session.get('sortorder'); 
Meteor.users.find({}, filter); 

Но, пожалуйста, проверьте, если он не определен, прежде чем присваивать его :)

+0

Это работает! Спасибо! – evlrbot

0

Ввод Session.get('sortby') непосредственно в спецификаторе сортировки даст синтаксическую ошибку.

Используйте if-else блок перед запросом, чтобы выяснить, какое значение сеанс содержит, и положить, что имя-полей в запросе вместо Session.get() как:

if(Session.equals('sortBy', 'profile_email')){ 
    return Meteor.users.find({}, {sort:{'profile_email':Session.get('sortorder')}}); 
} 
else if(Session.equals('sortBy', 'other_value')) { 
    return Meteor.users.find({}, {sort:{'other_value':Session.get('sortorder')}}); 
}