2014-09-30 41 views
0

在做下面的實現,我因爲它看起來像數據獲得的問題是無法在客戶端:使用中鐵路由器WaitOn依賴訂閱和使用它們的輔助功能

在鐵基的全局配置路由器,我訂閱「通知」發佈。 然後我獲取通知,並收集基於類型的元素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

的解決方案是此代碼移動:

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); 
} 
0

只是一個想法,你有沒有嘗試過使用Deps.autorun ('notificationsAnswers' with a Session variable),並在您的函數通知返回Session.set()

所以你只有waitOn問題,並且一旦找到q.targetObjectId,那麼設置Session的回答就會觸發它的訂閱。