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}
我正在尝试在用户单击按钮时对 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}