Как настроить автозапуск, чтобы он зависел от определенного запроса к коллекции без фактического извлечения данных? - PullRequest
1 голос
/ 02 марта 2020

Сценарий: я вызываю метод из моего шаблона, который выполняет сложные вычисления с использованием данных из нескольких коллекций и возвращает один небольшой фрагмент данных. Это прекрасно работает и экономит полосу пропускания.

Template.bar.onCreated(function() {
    this.bar = new ReactiveVar();
    Meteor.call("foobar", (err, res) => { if (err) { throw err; } else { this.bar.set(res) }} );
});

Теперь я хочу поместить вызов этого метода в autorun, чтобы он перезапускался всякий раз, когда изменяется одна (только одна) из участвующих коллекций. Единственное решение, которое я могу придумать, - это просто subscribe для какой-то очень специфической c публикации и сделать .find({}).fetch() внутри указанного autorun, что, безусловно, сработает, но оно также получит данные, которые я буду на самом деле не использовать, тратя тем самым пропускную способность и нанося поражение точке.

Template.bar.onCreated(function() {
    this.bar = new ReactiveVar();
    Meteor.subscribe('specificFooDocuments');//TMI :(
    this.autorun(() => {
        Foo.find({}).fetch();
        Meteor.call("foobar", (err, res) => { if (err) { throw err; } else { this.bar.set(res) }} );
    })
});

AFAIK то же самое произошло бы с .observe и .observeChanges.

Так что вопрос: могу ли я сделать autorun зависит от запроса без выборки фактических данных, и если да, то как? (предпочитается родной метеор)

...