在执行以下实施时,我遇到了问题,因为看起来客户端的数据不可用:
在Iron-router的全局配置中,我订阅了“notifications”发布。 然后我获取通知,并根据类型收集元素的ID。 然后我使用收集的ID订阅这些出版物。
在显示通知详细信息的模板中,我通过Notifications.find()循环通知,然后根据通知类型,我执行以下操作: 在我尝试访问元素字段时,我遇到了未定义的异常的Questions.findOne(_id)或Answers.findOne(_id)。
Router.configure({
layoutTemplate: 'layout',
loadingTemplate: 'loading',
waitOn: function() {
Meteor.subscribe('notifications', function() {
var notifications = Notifications.find().fetch();
var questionsIds = _.map(_.filter(notifications, function (notif) {
return notif.targetObjectType == 'QUESTION';
}), function(q) { return q.targetObjectId});
var answersIds = _.map(_.filter(notifications, function (notif) {
return notif.targetObjectType == 'ANSWER';
}), function(q) { return q.targetObjectId});
Meteor.subscribe('notificationsAnswers', answersIds);
Meteor.subscribe('notificationsQuestions', questionsIds);
如何等待“嵌套”订阅准备好在辅助函数中使用它们?
答案 0 :(得分:0)
只是想一想,您是否尝试使用Deps.autorun ('notificationsAnswers' with a Session variable)
,并在功能通知中返回Session.set()
?
所以你只有waitOn
个问题,一旦找到q.targetObjectId
,设置答案会话就会触发其订阅。
答案 1 :(得分:0)
解决方案是移动此代码:
var notifications = Notifications.find().fetch();
var questionsIds = _.map(_.filter(notifications, function (notif) {
return notif.targetObjectType == 'QUESTION';
}), function(q) { return q.targetObjectId});
var answersIds = _.map(_.filter(notifications, function (notif) {
return notif.targetObjectType == 'ANSWER';
}), function(q) { return q.targetObjectId});
Meteor.subscribe('notificationsAnswers', answersIds);
Meteor.subscribe('notificationsQuestions', questionsIds);
到同一个全局铁路由器配置中的onBeforeAction挂钩:
onBeforeAction : function() {
var notifications = Notifications.find().fetch();
var questionsIds = _.map(_.filter(notifications, function (notif) {
return notif.targetObjectType == 'QUESTION';
}), function(q) { return q.targetObjectId});
var answersIds = _.map(_.filter(notifications, function (notif) {
return notif.targetObjectType == 'ANSWER';
}), function(q) { return q.targetObjectId});
Meteor.subscribe('notificationsAnswers', answersIds);
Meteor.subscribe('notificationsQuestions', questionsIds);
}