2

我想编写一个帮助方法,该方法返回一个基于帐户-facebook 的用户配置文件列表,该用户配置文件按配置文件文档的子字段排序。助手应该依靠两个会话变量来指定子字段和排序顺序。会话变量可以通过 UI 更新,导致列表以新顺序重新呈现。就像是:

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')作为属性名称会产生错误。所以问题是,如何使用会话变量来指定排序字段名称?

4

2 回答 2

4

初始化一个对象并将键和值关联到它。然后将其传递给查询。例如:

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

但是,请在分配之前验证它是否未定义:)

于 2013-06-27T14:06:06.457 回答
0

直接Session.get('sortby')放在排序说明符中会产生语法错误。

在查询之前使用一个if-else块来找出 Session 包含的值,并将该字段名放入查询中,而不是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')}});
}
于 2013-06-27T09:32:37.250 回答