Meteor Collection.find()在工作期间阻止整个应用程序

时间:2017-05-12 09:55:17

标签: javascript mongodb meteor

我尝试在加载数据期间使用模态包在Meteor上显示加载警报。

'change .filterPieChart': function(evt){

    Modal.show('loadingModal');

    /* a little bit of work */
    var data = MyCollection.find().fetch(); // takes 3 or 4 seconds
    /* lot of work */

    Modal.hide('loadingModal');
}

通常,警报显示在功能的开头,并在结束时消失。但是在这里,警报仅在MyCollection.find()的加载时间之后出现,然后在后面消失。如何在函数的开头显示它?

我尝试用反应变量替换Modal.show,结果相同,在函数结束时检测到反应变量的变化值。

1 个答案:

答案 0 :(得分:0)

我认为您需要使用模板级订阅+ reactiveVar。它更像是流星的方式,你的代码看起来是一致的。我可以看到你在change事件上做了一些额外的工作(检索一些数据)。有意义的是真正真正地检索事件上的数据而不是模拟它。

  Template.TemplateName.onCreated(function () {
    this.subsVar = new RelativeVar();
    this.autorun( () => {
      let subsVar = this.subsVar.get();
      this.subscribe('publicationsName', this.subsVar);    
    })
  })

  Template.TemplateName.events({
    'change .filterPieChart': function(evt){
      Template.instance().collectionDate.subsVar.set('value');
      Modal.show('loadingModal');

      MyCollection.find().fetch();    

      Modal.hide('loadingModal');
    }
  })

请注意我没有测试此代码。你需要使用es6箭头功能。