2017-02-28 67 views
1

Iam使用cursor.observechanges查看是否有任何新记录插入到mongo中,并给出通知,因为新插入的记录和它工作正常。但问题在于当我的应用程序第一次加载时,Iam从观察到这些更改后收到这些通知警报。单击下一页时的名称。如何在页面加载流星后调用函数

cursor.observeChanges({ 
    added: function(id, object) { 
    Notification.error('NEW Record',object); 
    var audio = new Audio('audio.mp3'); 
    audio.play(); 
    } 
}); 

所以我需要调用的页面获取loaded.I只有在此之后机能的研究使用

Template.foo.onRendered(function() { 
    cursor.observeChanges({ 
    added: function(id, object) { 
     Notification.error('NEW Record',object); 
     var audio = new Audio('audio.mp3'); 
     audio.play(); 
    } 
    }); 
}); 

尝试,但它并没有在我的case.Is在那里工作,我们可以做this.Or任何其他方式否则,如果可能的话,我们可以如何设置5秒的时间并在该时间间隔之后调用上述功能? 任何帮助将不胜感激。谢谢!

回答

0

根据docsTemplate#onRendered

注册一个功能时,这个模板的实例插入到DOM被调用。

尝试来包装你的代码Meteor.defer

Template.foo.onRendered(function() { 
    Meteor.defer(function() { 
    cursor.observeChanges({ 
     added: function(id, object) { 
     Notification.error('NEW Record',object); 
     var audio = new Audio('audio.mp3'); 
     audio.play(); 
     } 
    }); 
    }) 
}); 

如果它不会帮助,尽量把它包在Meteor.setTimeout

Template.foo.onRendered(function() { 
    Meteor.setTimeout(function() { 
    cursor.observeChanges({ 
     added: function(id, object) { 
     Notification.error('NEW Record',object); 
     var audio = new Audio('audio.mp3'); 
     audio.play(); 
     } 
    }); 
    }, 5000) 
}); 
+0

我不同意。我不会尝试用计时器来解决这个问题。问题在于新记录与新出现的记录之间缺乏区别。 – zim

0

的行为是正确的,因为,到模板,那些记录的确加入了。浏览并浏览,重新创建模板,现在所有相同的记录再次成为模板的新增内容。

您需要将新记录的概念与新模板以及新记录分开。

我可以用时间戳来解决这个问题。例如

  1. 写一个流星方法提供了模板的onCreated(服务器
  2. 的当前时间),调用该方法,并保存断结果
  3. 在增加:处理器,比较的创建时间戳记增加的项目到已保存的时间
  4. 如果添加的项目是年纪大了,什么也不做
  5. 如果添加的项目是新的,把你的行动

这意味着你的收藏将需要一个createdAt字段。

此解决方案应该可用于重新加载应用程序,浏览/从模板中浏览以及长时间运行的模板。

为了获得最佳效果,在Meteor方法调用返回服务器时间之前不要开始您的订阅。所有这些都应该发生在onCreated()。

相关问题