2016-03-10 4 views
2

ПОСЛЕДНИЙ РЕДАКТИРОВАТЬ: Попробуйте Tracker.afterFlush в обратном вызове на подписку.Метеор: подождать коллекцию со стороны клиента

EDIT: сортировка не была проблемой, это была новая подписка на одну и ту же коллекцию с новой переменной сеанса. Проблема возникла из-за того, что Meteor не ударил старые документы, прежде чем запускать callback-onReady callback ...

У меня есть помощник Meteor, который возвращает отсортированную коллекцию (сопоставленные документы). Это выглядит следующим образом:

"currentNames": function() { 
     if (Session.get("sortBy") === "rating") { 
      return MyCollection.find({'name': {$exists: true}}, {sort: {rating: -1}}).map(function (document, index) { 
       document.index = index; 
       return document; 
      }); 
     } 
     else if (Session.get("sortBy") === "alphabet") { 
      return MyCollection.find({'name': {$exists: true}}, {sort: {name: 1}}).map(function (document, index) { 
       document.index = index; 
       return document; 
      }); 
     } 
} 

Рода работает красиво. У меня есть шаблон с помощью этого помощника в {{#each currentNames}} -loop, который также работает. Но когда я меняю тип сортировки, меняя поле сеанса sortBy, мои показанные результаты (html-dom-elems) полностью крутятся (изменяя их позиции), пока они не найдут свой окончательный вид. Я говорю о 100 документах в коллекции, которую я сортирую.

Поскольку я не хочу, чтобы мои пользователи видели этот процесс сортировки вживую, я хочу подождать, пока сортировка закончится. Но я не могу найти способ подождать, пока сорт не закончится. Я знаю, когда скрывать результаты (это когда изменяется переменная сеанса sortBy), но у меня нет обратного вызова или что-то еще, когда сортировка завершена. Но мне это нужно.

Благодарим вас за внимание! Надеюсь, ты поможешь мне.

ответ

0

От метеоритного руководства:

Это также стоит знать немного о том, что происходит на сервере, когда новая подписка запускается и старый один останавливается.

Сервер явно ожидает, пока все данные будут отправлены вниз (новая подписка готова) для новой подписки перед удалением данных из старой подписки. Идея здесь заключается в том, чтобы избежать мерцания - вы можете, при желании, продолжать показывать данные старой подписки до тех пор, пока новые данные не будут готовы, а затем мгновенно перейдут на полный набор данных новой подписки.

Это означает, что при изменении подписки будет период, когда вы переназначаетесь, и на клиенте есть больше данных, чем вы строго запрашивали. Это очень важная причина, по которой вы всегда должны получать те же данные, на которые вы подписаны (не «перехватывать»).

Так что в вашем случае вы можете скрыть свой вид (или показать загружаемый текст и т. Д.), Пока ваша новая подписка не будет готова. Вы можете проверить его с помощью функции ready() обработчиков подписки (которая является реактивной).

+0

Я не думаю, что это действительно отвечает на мой вопрос, потому что обратный вызов, готовый к подписке, запускается перед сортировкой. – ant45de

Смежные вопросы