麻烦与流星排序

时间:2015-10-26 07:46:52

标签: sorting dynamic meteor collections

我试图在列表上方添加一个简单的下拉控件,以便我可以通过" 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');
}

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

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

谢谢!

2 个答案:

答案 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}});
            };
        }
    }
    });