Meteor:在模板完全加载后的observeChanges

时间:2015-06-09 22:51:17

标签: meteor

我正在试验meteor,我正面临一些代码结构问题。 我想要的是什么: 我使用观察者来跟踪在集合上添加的新文档,但我希望仅在模板完全呈现后才能“通知”。

在我的router.js文件中,我有:

HospitalListController = RouteController.extend({
  action: function() {
    Meteor.subscribe('hospitals');
    this.render('listHospitals');
  }
});

我的客户listHospital.js文件是

Template.listHospitals.onRendered(function(){
  var first = true;
  hospitalsCursor = Hospitals.find();
  var totals = hospitalsCursor.count();
  var loaded = 0;

  HospitalsHandle = hospitalsCursor.observeChanges({
    added : function(doc){
      if( loaded != totals ){
        loaded++;
      }else{
        console.log("added "+doc);    
      }
    }
  });
});

有没有更好的方法,也许是一种'流星'来实现这一目标?

2 个答案:

答案 0 :(得分:0)

您必须在初始化期间添加一个标志以忽略observeChange回调(找到此解决方案here)。

Template.listHospitals.onRendered(function(){

  var initialized = false;

  hospitalsCursor = Hospitals.find();

  HospitalsHandle = hospitalsCursor.observeChanges({
    added : function(doc){
      if(initialized) {
        // your logic
      }
    }
  });

 initialized = true;

});

这应该有用。

答案 1 :(得分:0)

我的实际工作代码:

Template.queueView.onRendered(function(){
  var initialLoaded = false;

  Queues.find().observeChanges({
    added : function(id, doc){
      if( initialLoaded ){
        console.log("added "+id);  
        highlight();
        beep();

      }   
    },
    removed : function(id, doc){
      console.log("removed "+id);
      highlight();
      beep();
    },
    changed : function(){
      console.log('modified!');
      highlight();
      beep();
    }
  });


  Meteor.subscribe('queues', function(){
    initialLoaded = true;
  });

});