Как заказать collection.find на основе результатов внешнего вызова API?

У меня есть коллекция названных событий. Они геолокализованы. Я хочу показать клиенту список событий, упорядоченный по расстоянию между клиентом и каждым событием (по дороге). Чтобы вычислить это, я использую HTTP.call для открытого API mapquest, обернутого в метод метеора.

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

Любая идея?

1 ответ

Решение

Вы можете "наблюдать" свою коллекцию событий и создать новую коллекцию только на стороне клиента (или изменить коллекцию событий), которая имеет поле "distanceFromClient", и затем вы можете сортировать по этому.

    Events = new Meteor.Collection('events');


    if (Meteor.isClient) {
      GeoEvents = new Meteor.Collection(null);

      var eventsObserver = Events.find().observe({
            added: function(item) {
              item.distanceFromUser = distanceFrom(item);
              GeoEvents.insert(item);
            }
          });

      Template.myTemplate.helpers({
        events: function() {      
          return GeoEvents.find({},{sort: {distanceFromUser: 1});
        }
      });
   }
Другие вопросы по тегам