【发布时间】:2015-10-09 02:52:49
【问题描述】:
那里有很多关于这个主题的信息,但我似乎无法让它为自己工作。我正在使用 toastr 在我的应用程序的右上角向用户显示事件通知。我需要将“添加”事件的观察者添加到集合中,并在添加项目时创建 toastr 通知。问题是观察者在集合初始化时触发。在我允许观察者代码继续执行并显示通知之前,我已经尝试了大约六种不同的方法来检查集合是否就绪(),但我无法让它始终如一地工作,尤其是在更改页面时。下面是一些示例代码:
MainController = RouteController.extend({
before: [
function() {
deviceEventsInitializing = true;
var alerts = this.subscribe("alerts", Meteor.user()._id);
if (alerts.ready()) {
deviceEventsInitializing = false;
}
Alerts.find().observeChanges({
added: function(id, doc) {
if (deviceEventsInitializing || deviceEventsInitializing == undefined) {
return;
}
doToastrStuff();
}
});
this.next();
}
],
});
这只是我最近的尝试。流程是这样的:
1.) 订阅发生,集合中的所有项目都命中观察者,但 deviceEventsInitializing 为真,因此它什么也不做。 2.) alerts.ready() 触发并且 deviceEventsInitilizing 设置为 false。 3.) 为集合中的所有事件再次触发添加的触发器,从而为每个项目调用 toastr。
我只对以下内容感兴趣:
1.) 一些触发器或事件,我可以在其中设置一个表示订阅正在重新加载集合的变量。 2.) 一些触发器或事件告诉我此集合的重新加载已完成,因此我可以设置一个变量来表明这一点。
【问题讨论】:
-
我没有答案,只有一个建议——你可以通过在路由器之外设置你的 observeChanges 来大大简化任务。 Iron Router before() 钩子设计为在数据更改时多次运行,因此即使您将标志从 true 更改为 false,钩子可能会在标志设置为 true 的情况下从顶部再次运行。从 Meteor.startup 进行观察可能会起作用
标签: mongodb meteor iron-router