0

我有 2 个 mongo 流星集合,命名应用程序和滑块我有一个订阅它们的服务,当它们准备好时,它会以树格式填充一个数组。

问题是,当集合发生变化时,没有任何东西可以告诉服务。因此,如果我将集合和数组打印到 html 中,第一次所有内容都会同步,但在更改集合后,只有集合会更改.. 数组不会

简而言之,当数据库中的集合发生变化时,流星集合被更新,但不是我的“部分”数组

在我的服务中:

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 正在循环这些部分。

4

1 回答 1

0

您正在调用createSections订阅回调,它只会在订阅时触发一次.ready()。听起来您希望每次修改应用程序集合时都更新部分。在这种情况下,您可以使用应用程序。observeChanges每次从您的集合中添加、更改或删除文档时都会触发。就像是:

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

不要忘记 Minimongo 游标默认情况下是响应式的,只要您在响应式数据上下文中调用它们,那么简单applications.find().forEach(function(doc){})就足以满足您的目的。

于 2015-10-09T05:17:09.487 回答