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