Сортировка коллекции метеоров не работает должным образом

Я пытаюсь отсортировать одну коллекцию, когда пользователь нажимает кнопку. При первом щелчке он работает, как ожидалось, но затем, когда я щелкаю его снова, ничего не происходит.

На meteor.startup я сортирую свою коллекцию по «дате». Когда пользователь нажимает кнопку категории, он меняет сортировку на «категорию», а затем я пытаюсь обрабатывать каждый щелчок той же кнопки, чтобы изменить сортировку с возрастающей на убывающую.

Вот фрагмент, который обрабатывает щелчок пользователя:

(Я почти уверен, что проблема где-то здесь)

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,
   });
});

Может ли кто-нибудь помочь мне выяснить, что здесь не так? Спасибо.


person André Varandas    schedule 23.01.2016    source источник


Ответы (2)


Поскольку вы просто переключаете направление сортировки, вы можете упростить обработчик событий до:

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

Переменная сеанса будет оцениваться как {category: 1} или {category: -1}

person Michel Floyd    schedule 23.01.2016
comment
Спасибо, Майкл, чистое решение. Хотя это не работало, пока я не добавил category : -1 в Meteor.startup в моем файле main.js. - person André Varandas; 23.01.2016

В вашем маршрутизаторе вы должны использовать $ orderBy, а не sort

Router.configure({
layoutTemplate: 'layout',
waitOn: function() {
    return Estagios.find({},{ $orderBy: Session.get("sort_by")});
  },
})
person Oliver    schedule 23.01.2016
comment
Спасибо, что уделили время, Оливер, до сих пор никакой радости. Это выражение было бы таким же? Так должно быть? return Estagios.find({$query: {},{ $orderBy: Session.get("sort_by")} }); - person André Varandas; 23.01.2016
comment
Ах да, я не заметил позже, что основная установка другого ключа. - person Michel Floyd; 24.01.2016