waitOn:设置会话值,然后使用定义订阅

时间:2014-08-13 21:12:29

标签: meteor

这是我的路线:

  this.route('friends', {
    path: '/friends',
    waitOn: function() {
     return Meteor.subscribe('friendsPlaylists', Session.get('friends'))
    }
  });

在此路线之前,我调用一个命中api的函数,并设置一个会话值:

Router.onBeforeAction(getFriends, {only: 'friends'})

var getFriends = function() {
  Meteor.call('getFriendsData', function(err, result) {
    Session.set('friends', result.data);
    Session.set('friendsLoaded', true);
  });
}

返回Meteor.subscribe时,由于异步行为,未设置会话。如何让订阅工作,等待会话设置的位置?提前感谢您提供任何帮助!

1 个答案:

答案 0 :(得分:1)

FYI onBeforeAction有一个名为pause的参数,它是一个暂停路由执行的函数,所以你可以像这样重写你的代码:

Router.onBeforeAction(getFriends, {only: 'friends'})

var getFriends = function(pause) {
  Meteor.call('getFriendsData', function(err, result) {
    Session.set('friends', result.data);
    Session.set('friendsLoaded', true);
  });
  if(!Session.get('friendsLoaded')){ pause(); }
  else{
     this.subscribe('friendsPlaylists', Session.get('friends')).wait();
  }
}

请参阅:https://github.com/EventedMind/iron-router/blob/devel/DOCS.md#using-hooks