Как заказать 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});
}
});
}