Meteor collection 排序未按预期工作

Meteor collection sorting not working as expected

我正在尝试在用户单击按钮时对 collection 进行排序。我第一次点击时它按预期工作,但是当我再次点击它时没有任何反应。

在 meteor.startup 我将我的 collection 按 'date' 排序。当用户单击类别按钮时,它将排序方式更改为 'category',然后我尝试处理每次单击同一按钮,将排序从升序更改为降序。

这是处理用户点击的代码片段:

(我几乎可以肯定问题就出在这里)

layout.js

Template.layout.events({
'click #cat': function(event) {
    event.preventDefault();

    //sets the session to a variable
    var sortBy = Session.get('sort_by');

    if (sortBy.category == 'desc') {
        return Session.set('sort_by', {
            category: 'asc'
        });
    } else {
        return Session.set('sort_by', {
            category: 'desc'
        });
    }
  }
})

这是我的 router.js:

Router.configure({
layoutTemplate: 'layout',
waitOn: function() {
    return Estagios.find({},{ sort: Session.get("sort_by")});
  },
})

Publications.js

Meteor.publish('nestagios', function() {
  return Estagios.find({});
})

这是我的main.js

Meteor.startup(function() {
Session.set("sort_by", {
    date: -1,
   });
});

谁能帮我看看,这里有什么问题吗?谢谢。

在您的路由器中,您应该使用 $orderBy 而不是排序

Router.configure({
layoutTemplate: 'layout',
waitOn: function() {
    return Estagios.find({},{ $orderBy: Session.get("sort_by")});
  },
})

由于您只是切换排序方向,因此您可以将事件处理程序简化为:

Template.layout.events({
  'click #cat': function(event) {
    event.preventDefault();
    Session.set('sort_by',{category: -Session.get('sort_by').category});
});

会话变量将计算为 {category: 1}{category: -1}