麻烦/流星分类

Trouble w/ Meteor Sorting

我正在尝试在列表上方添加一个简单的下拉控件,以便我可以按 "created" 或 "title" 对其进行排序。

列表模板名为 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');
}

在这里我可以确认正确的排序条件已写入会话。但是,我无法刷新页面。可见页面上的集合永远不会重新排序。

令人沮丧。有什么想法吗?

谢谢!

您不能将变量用作对象字面量中的键。试一试:

posts: function() {
  var sortCriteria = Session.get('sortCriteria');
  var options = {};
  if (sortCriteria) {
    options.sort = {};
    options.sort[sortCriteria] = 1;
  }
  return Posts.find({}, options);
}

另请参阅 common mistakes 的 "Variables as keys" 部分。

非常感谢。请注意,我在下面注释掉了代码以显示我提取的内容。如果我需要一个真正的动态选项,而不是下面的简单二进制文件,我会坚持使用 "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}});
            };
        }
    }
    });