Угловая коллекция метеоров

У меня есть 2 коллекции метеоров mongo, названные приложения и ползунки. У меня есть служба, которая подписывается на них и, когда они готовы, заполняет массив в виде дерева.

проблема в том, что когда коллекция меняется, ничего не говорит сервису об этом. Поэтому, если я печатаю коллекции и массив в html, в первый раз все синхронизируется, но после изменения в коллекции меняется только коллекция.. не массив

короче говоря, когда коллекция в базе данных изменяется, обновляется коллекция метеоров, но не мой массив "section"

в моем сервисе:

var applications, sliders;
var sections = [{
              name: 'Getting Started',
              //state: 'home.gettingstarted',
              type: 'link'
            }];



          $meteor.subscribe('applications').then(function(subscriptionHandle) {
            applications = $meteor.collection(Applications);
          }).then(function(subscriptionHandle) {
            $meteor.subscribe('sliders').then(function(subscriptionHandle) {
              sliders = $meteor.collection(Sliders);
              createSections();
            });
          });


function createSections() {
//some login to create a tree
            for (var i = 0; i < applications.length; i++) {
              var pages = [];
              for (var j = 0; j < sliders.length; j++) {
                if (sliders[j].appId != applications[i].id())
                  continue;
                var page = {};
                page.name = sliders[j].nm;
                page.type = "link";
                page.data = sliders[j];
                pages.push(page);
              }
              sections.push({
                name: applications[i].nm,
                type: 'toggle',
                pages: pages,
                data: applications[i]
              });
            }
          }

контроллер в использовании сервиса. HTML зацикливает разделы.

1 ответ

Ты звонишь createSections в обратном вызове подписки, который срабатывает только один раз при подписке .ready(), Похоже, что вместо этого вы хотите обновлять разделы каждый раз, когда изменяется коллекция приложений. В этом случае вы можете использовать приложения. observeChanges который срабатывает каждый раз, когда документы добавляются, изменяются или удаляются из вашей коллекции. Что-то вроде:

applications.observeChanges({
  added: function(id, doc) {
    // do stuff with added documents
  }
});

Не забывайте, что курсоры Minimongo по умолчанию являются реактивными, если вы называете их в контексте реактивных данных, поэтому applications.find().forEach(function(doc){}) может быть достаточно для ваших целей.

Другие вопросы по тегам