我试图在列表上方添加一个简单的下拉控件,以便我可以通过" created"来对其进行排序。或"标题"。
列表模板名为posts_list.html
。在我的帮助.js文件中我有:
posts: function () {
var sortCriteria = Session.get("sortCriteria") || {};
return Posts.find({},{sort: {sortCriteria: 1}});
}
然后,我将列表抽象为另一个模板。从这里开始,我在helper.js
"click": function () {
// console.log(document.activeElement.id);
Session.set("sortCriteria", document.activeElement.id);
// Router.go('history');
Router.render('profile');
}
在这里,我可以确认将正确的排序条件写入会话。但是,我无法刷新页面。可见页面上的集合永远不会重新排序。
令人沮丧。有什么想法吗?
谢谢!
答案 0 :(得分:0)
您不能将变量用作对象文字中的键。试一试:
posts: function() {
var sortCriteria = Session.get('sortCriteria');
var options = {};
if (sortCriteria) {
options.sort = {};
options.sort[sortCriteria] = 1;
}
return Posts.find({}, options);
}
另请参阅common mistakes的“变量为键”部分。
答案 1 :(得分:0)
非常感谢。注意我已经在下面留下了注释掉的代码,以显示我提取的内容。如果我需要一个真正动态的选项,而不是下面的简单二进制,我会坚持使用“var options”方法。我最终得到的是:
Template.postList.helpers({
posts: function () {
//var options = {};
if (Session.get("post-list-sort")) {
/*options.sort = {};
if (Session.get("post-list-sort") == "Asc") {
options.sort['created'] = 1;
} else {
options.sort['created'] = -1;
}*/
//return hunts.find({}, options);}
console.log(Session.get("hunt-list-sort"));
if (Session.get("hunt-list-sort") == "Asc") {
return Hunts.find({}, {sort: {title: 1}});
}
else {
return Hunts.find({}, {sort: {title: -1}});
};
}
}
});