Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 流星收集排序未按预期工作_Javascript_Meteor_Meteor Blaze - Fatal编程技术网

Javascript 流星收集排序未按预期工作

Javascript 流星收集排序未按预期工作,javascript,meteor,meteor-blaze,Javascript,Meteor,Meteor Blaze,我试图在用户单击按钮时对一个集合进行排序。当我第一次点击它时,它就像预期的那样工作,但是当我再次点击它时,什么也没有发生 在meteor.startup上,我正在按“日期”对我的收藏进行排序。当用户单击category按钮时,它会将sort by更改为“category”,然后我会尝试处理每次单击同一按钮时,将排序从升序更改为降序 以下是处理用户单击的代码段: (我几乎可以肯定问题出在这里的某个地方) layout.js Template.layout.events({ 'click #cat'

我试图在用户单击按钮时对一个集合进行排序。当我第一次点击它时,它就像预期的那样工作,但是当我再次点击它时,什么也没有发生

在meteor.startup上,我正在按“日期”对我的收藏进行排序。当用户单击category按钮时,它会将sort by更改为“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'
        });
    }
  }
})
这是我的路由器.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,而不是sort

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}

谢谢您的时间,Oliver,仍然没有乐趣。那个表达式会是一样的吗?应该是这样吗<代码>返回Estagios.find({$query:{},{$orderBy:Session.get(“sort_by”)})啊,是的,直到后来我才发现主控台设置了不同的键。谢谢Michael,干净的解决方案。虽然直到我在main.js文件中将
类别:-1
添加到Meteor.startup中,它才起作用。