我使用cursor.observechanges查看是否有任何新记录插入mongo并提供新的recored插入通知并且它正常工作。但这里的问题是我的应用程序第一次加载时,我得到那些通知警报,因为它观察到这些变化。我点击下一页时的方式。
cursor.observeChanges({
added: function(id, object) {
Notification.error('NEW Record',object);
var audio = new Audio('audio.mp3');
audio.play();
}
});
所以我需要在页面加载后才调用此函数。我尝试使用
Template.foo.onRendered(function () {
cursor.observeChanges({
added: function(id, object) {
Notification.error('NEW Record',object);
var audio = new Audio('audio.mp3');
audio.play();
}
});
});
但它在我的情况下没有用。我们还有其他方法可以做到这一点。或者如果可能的话,我们如何设置5秒的时间并在该时间间隔后调用上述功能? 任何帮助将不胜感激。谢谢!
答案 0 :(得分:0)
根据docs Template#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)
});
答案 1 :(得分:0)
行为是正确的,因为对于模板,确实添加了那些记录。浏览并浏览,重新创建模板,现在所有这些相同的记录再次成为模板的新内容。
您需要将新记录的概念与模板分开,并将记录作为应用程序的新记录。
我可以通过时间戳解决这个问题。 e.g。
这意味着您的收藏将需要一个createdAt字段。
此解决方案既可用于重新加载应用,也可用于浏览模板或从模板进行浏览以及长时间运行的模板。
为了获得最佳效果,请不要开始订阅,直到Meteor方法调用返回服务器时间为止。所有这些都应该发生在onCreated()。