Публикация счета за объекты в Метеоре - PullRequest
2 голосов
/ 18 марта 2019

На моей серверной стороне у меня есть публикация для различных объектов, которая в основном возвращает счет. Каждый отдельный объект имеет другое название публикации, например:

Meteor.publish('object1Count', function(...

Meteor.publish('object2Count', function(...

Что-то вроде этого:

Meteor.publish('object1Count', function(arg) {
var self = this;
var count = 0;
var initializing = true;

var query = arg?{arg:arg}:{};
var projection = !arg?{limit:1}:{};

var handle = Object1.find(query, projection).observeChanges({
  added: function (idx) {
    count++;
    if (!initializing)
      self.changed("totalcounts", 1, {count: count});  
  },
  removed: function (idx) {
    count--;
    self.changed("totalcounts", 1, {count: count});  
  }
});

initializing = false;

self.added("totalcounts", 1, {count: count});

self.ready();

self.onStop(function () {
  handle.stop();
});

}); 

Но, как вы видите внутри каждого из этих методов, будет эта строка

self.added("totalcounts", 1, {count: count}); 

На самом деле на стороне клиента, когда мне нужно получить доступ к счетчику объектов, я делаю так:

template.subscribe('object1Count', template.reactiveEventId.get());
...
TotalCounts = (typeof TotalCounts==='undefined')?new Mongo.Collection("totalcounts"):TotalCounts;

Это, очевидно, работает, но теперь, когда я прочитал его дважды, я удивляюсь, почему коллекция "totalcounts" выглядит одинаково для всех объектов, поэтому, если я переключаюсь между страницами, требующими разные totalcounts (для разных объектов), я думаю, что клиент уничтожает локальную коллекцию totalcounts и создает новую. Это также происходит на стороне сервера?

Итак, наконец, мой вопрос: какова лучшая практика? Проекты нуждаются в общем количестве по разным причинам: разбивка на страницы, графики и т. Д. Я хочу создать серверную часть общего количества и просто передать для этого минимальные данные. Должен ли я создавать разные "totalcounts" для каждого объекта? Какой эффективный способ сделать это?

Спасибо

1 Ответ

3 голосов
/ 18 марта 2019
self.added("totalcounts", 1, {count: count});

это означает добавление к имени коллекции totalcounts документ с _id равен 1, а остальные данные {count: count}. Поскольку они имеют одинаковый _id, вы не можете сделать более 1 подписки. Кстати, когда шаблон «размонтирован», он автоматически останавливает подписки.

...